Coder Social home page Coder Social logo

it-mentor-community-bot's Introduction

Информация

  • Создание бота и получение токена - https://t.me/BotFather
  • При создании бота нужно отправить BotFather команду /setinline, иначе бот не будет работать через @ в чате
  • Бот должен быть админом в чатах в которых вызываются его команды и в чате в который он будет пересылать сообщения
  • yoyo-migrations документация

Локальный запуск

  1. Создать venv
python -m venv venv
  1. Активировать venv (если pycharm не сделал это автоматически)
source venv/bin/activate

https://www.jetbrains.com/help/pycharm/configuring-python-interpreter.html#widget

  1. Установить зависимости (если pycharm не сделал это автоматически)
pip install -r requirements.txt
  1. Создать .env файл в корне проекта. Он будет использоваться только для локального запуска
TELEGRAM_BOT_TOKEN=

POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=
POSTGRES_HOST=localhost
POSTGRES_PORT=

PROJECTS_REVIEWS_COLLECTION_CHAT_ID=
ALLOWED_USER_IDS=

ALLOWED_USER_IDS - Список id юзеров, которые могут пользоваться командой. Указывается через запятую без пробелов = 322,511,987

  1. Поднять БД в контейнере командой
docker compose -f docker-compose-dev.yaml up -d
  1. Сделать миграцию для БД. Использовать те же данные, которые указаны в .env файле
yoyo apply --database postgresql://user:password@localhost:5433/database-name ./migrations
  1. Запустить проект
  • C помощью UI pycharm
  • Через python src/main.py

Запуск в докере

  1. Создать .env.prod файл в корне проекта. Он будет использоваться только для локального запуска
TELEGRAM_BOT_TOKEN=

POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=
POSTGRES_HOST=database
POSTGRES_PORT=5432

PROJECTS_REVIEWS_COLLECTION_CHAT_ID=
ALLOWED_USER_IDS=

POSTGRES_HOST = название сервиса с БД в docker-compose-prod.yaml файле. Дефолт database POSTGRES_PORT = порт сервиса с БД в docker-compose-prod.yaml файле. Дефолт 5432 для postgres ALLOWED_USER_IDS - Список id юзеров, которые могут пользоваться командой. Указывается через запятую без пробелов = 322,511,987

  1. Собрать образ бота
docker build -t zhukovsd/it-mentor-community-bot:main .
  1. Запустить бота и БД в докер композ
docker compose -f docker-compose-prod.yaml --env-file .env.prod up -d

it-mentor-community-bot's People

Contributors

krios2146 avatar zhukovsd avatar

Stargazers

 avatar Javohir Ismoilov avatar Alfob avatar Sergey Udachin avatar

Watchers

 avatar

it-mentor-community-bot's Issues

Команда для учёта сданных проектов роадмапа

Функционал

Суть - автоматизация обработки сдаваемых проектов.

Вася: Вот мой проект - github.com/.../...
Админ: <ответ> /addproject java hangman

Bot:

  • Forward github link в другой чат
  • <ответ на сообщение Васи>:

Спасибо за проект, ссылка на него будет опубликована в итогах следующего месяца.

Проверьте, что проект запускается и к репозиторую есть публичный доступ, это повышает шансы получить фидбек.

Ресурсы для работы над ошибками:

  • Чеклист типовых проблем в конце ТЗ
  • Список ревью - %ссылка%
  • Эталонная реализация и лекции - %ссылка%

БД

add_project_replies

language | project_name | message                       

java         | simulation        | "Спасибо, boosty, review ..."
*              | simulation        | "Спасибо, review ..."
  • При поиске сообщения для языка java, project = simulation -> SELECT * FROM ... WHERE language = java AND project_name = simulation
  • Если найдено - отправляем
  • Если не найдено, ищем сообщение для любого языка SELECT * FROM ... WHERE language = * AND project_name = simulation
  • Если найдено - отправляем
  • Если не найдено - логируем ошибку, пишем в чат "сообщение по заданным критериям не найдено"

Чеклист

  • Обработчик команды /addproject $language $project_name (поймать команду, залогировать)
  • Взять сообщение, реплаем на которое была отправлена команда, и сделать форвард в отдельный чат
  • Если команда сделана вне реплая - логируем, пишем в чат ошибку ("сделайте реплай на сообщение со ссылкой на проект")
  • Ошибка аргументов - логируем, пишем в чат ошибку (неправильное количество аргументов (ожидаем ровно 2), невалидный проект)
  • Бот проверяет, что отправший команду юзер является админом того чата, откуда вызвана команда
  • Нет прав - логируем, пишем в чат ошибку (у вас нет прав на использование данной команды)
  • БД
    • Выбрать инструмент миграций (liquibase, flyway, python-specific tool?) = yoyo-migrations
    • Добавить в композ файл postgres
    • .env - хранить креденшелы доступа к БД
    • Миграция для создания таблицы
    • Простой инструмент для работы с БД (аналог JDBC)
    • В обработчике команды /addproject, найти по критериям сообщение и отправить в чат в виде реплая на изначальное сообщение пользователя
    • Проверить, что у инструмента миграции есть служебная таблица в БД и миграции не применятся дважды
  • Разобраться с профилями докер композ файла и переменными окружения
  • Обновить README

Доработки

  • Фикс ссылки на роадмап при добавлении проекта на питоне
  • Ссылка на менторство по трудоустройству в ответе на 6-7 проект (не помню есть она там или нет)
  • Упоминание платных ревью
  • При ошибке отвечать реплаем, чтобы сообщения шли не в основной топик, а в тот где была вызвана команда
  • Удалять сообщение с командой после успешного выполнения, чтобы не засорять чат
  • Удалять сообщения об ошибке и сообщение с командой через ~10 секунд, чтобы не загрязнять чат

Вопросы

  • Что делать с невалидными $project_name?
    • Отвечать ошибкой, логировать
  • Как определять, кто админ, и кому можно отправлять команду?
    • Команда доступна админам чата
  • Что делать, если /addproject отправлена не в виде реплая
    • Отвечать ошибкой, логировать
  • Откуда брать текст ответа?
    • Из БД
  • В какой чат делать форвард?
    • Брать chat id из конфига (example - projects_reviews_collection_chat_id)
  • Список валидных проектов - 7 названий, в таком же написании как здесь - https://github.com/zhukovsd/java-backend-learning-course/tree/main/content/finished-projects

Тестирование

  • Добавить бота в чат, где он будет ожидать команд
  • Заполнить таблицу add_project_replies тестовыми данными
  • Указать в конфиге значение projects_reviews_collection_chat_id, добавить бота в чат, куда он будет делать форвард
  • Протестировать вручную все сценарии успеха и ошибок, отправляя команду /addreview

Hello, World

В ответ на команду /hello, бот отвечает World

Изучить взаимодействие с ботом и изложить варианты:

  • /hello -> World
  • @it-mentor-bot /hello -> World
  • Что-то ещё?
  • Может ли Telegram клиент подсказывать команды?

Ожидаемый результат:

  • Запускаем бота локально, указав токен (вероятно, через переменную окружения или другой принятный в питоне способ)
  • Сценарий 1 - Hello, World в личных сообщениях
  • Сценарий 2 - Hello, World в общем чате

Команда для поиска по коду GitHub репозитория

Подготовка:

  • Изучить GitHub REST API:
    • Авторизацию
    • Лимиты (сколько запросов в минуту/час/день можно делать, что будет при превышении лимитов)
  • Выбрать клиент для API

Цель - реализовать команду поиска кода в конкретном GitHub репозитории. В будущем это станет основой поиска кода по реализациям проектов роадмапа.

Ожидаемый результат:

  • В ответ на команду codesearch $repo_url $query бот находит

Пример:

  • codesearch https://github.com/krios2146/currency-exchange-api PATCH
  • Выдача:
  1. krios2146/currency-exchange-api - ExchangeRateServlet.java#L93
        }
    }
    protected void doPatch(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String url = req.getPathInfo().replaceAll("/", "");
        if (url.length() != 6) {
  1. krios2146/currency-exchange-api - README.md#L186
#### PATCH `/exchangeRate/USDEUR`
Updates the existing exchange rate in the database. The currency pair is specified by consecutive currency codes in the
query address. The data is passed in the body of the request in the x-www-form-urlencoded. The only form field

Выбор фреймворка

Приоритеты:

  • Актуальный, поддерживаемый фреймворк с поддержкой свежих фич телеграм ботов
  • Совместимость с SQL
  • Адекватная документация
  • Интуитивность

Что сделать:

  • Выбрать топ 3-5 вариантов, отсортировать их в соответствии с приоритетами, изложенными выше

Dockerfile & docker-compose.yaml

  • Dockerfile для сборки образа с приложением
    • Внутрь образа не должны попасть секреты (токен бота, например)
  • Docker compose
    • 1 сервис - bot, имя образа - zhukovsd/it-mentor-community-bot
    • Секреты (токен бота) передаются в сервис через переменные окружения

Ожидаемый результат:

  • Бот стартует при старте стека, в логах виден результат успешного запуска
  • Команда Hello World работает в личных сообщениях и в чатах

Локальное окружение

  • PyCharm проект
  • Заготовка проекта на выбранном фреймворке
  • Инструкции для запуска в README.md (нужно ли venv, если да то как создать, как поставить зависимости, как передать токен боту, и так далее)

Ожидаемый результат:

  • Проект можно завести в PyCharm по инструкции из README, ставить в коде брейкпоинты

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.