Бот¶
Описание инициализации и обработчиков в боте, реализованном с помощью фреймворка aiogram -
- python_runner_bot.bot.CMD_HELP = BotCommand(command='help', description='Usage hints')¶
Описание команды для отображения помощи
- python_runner_bot.bot.CMD_RUN = BotCommand(command='run', description='Run in group chats')¶
Описание команды запуска кода
- python_runner_bot.bot.CMD_SET_LANG = BotCommand(command='set_lang', description='Switch locale')¶
Описание команды для смены локали
- python_runner_bot.bot.CMD_SET_PYTHON = BotCommand(command='set_python', description='Change Python version')¶
Описание команды для смены используемой версии Python
- python_runner_bot.bot.CMD_TEST = BotCommand(command='test', description='Check run overhead')¶
Описание команды для проверки оверхеда
- python_runner_bot.bot.add_user_if_not_exist(message: Message)¶
Проверка наличия пользователя в базе данных и его добавление при необходимости. Первоначально было частью обработчика команды «/start», но позднее вынесено в отдельную функцию и теперь используется во всех обработчиках.
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
Причина вынесения в отдельную функцию: в сценарии личного использования бота Telegram начинает с запуска посредством команды «/start» и поведение бота соответствует запланированному. Однако при использовании в групповых чатах их участники не проходят через этап «старта» бота, вследствие чего информация о пользователях не добавлялась в БД. Это в свою очередь приводило к тому, что в обработчики отдавались значения настроек «по умолчанию», а изменить их не представлялось возможным т.к. нельзя обновить значение в БД, которого еще нет.
- async python_runner_bot.bot.change_locale(message: Message) None¶
Обработчик для «/set_lang» - команды смены локализации для пользователя. Аргумент команды - код локализации, присутствующий среди представленных локализаций.
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
Команда является одним из типов сущностей, которые могут присутствовать в сообщении и aiogram в типе Message предоставляет информацию о присутствующих сущностях, в т.ч. позиция с которой сущность начинается и сколько символов занимает. За счет данной информации и извлекается аргумент команды.
- async python_runner_bot.bot.change_python(message: Message) None¶
Обработчик для «/set_python» - команды смены используемой по умолчанию версии Python Аргумент команды - номер версии Python, присутствующий среди указанных в модуле констант версий.
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
Команда является одним из типов сущностей, которые могут присутствовать в сообщении и aiogram в типе Message предоставляет информацию о присутствующих сущностях, в т.ч. позиция с которой сущность начинается и сколько символов занимает. За счет данной информации и извлекается аргумент команды.
- async python_runner_bot.bot.check_overhead(message: Message)¶
Обработчик для «/test» - команды запуска тестового контейнера с замером времени старта и остановки
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
- async python_runner_bot.bot.command_start_handler(message: Message) None¶
Обработчик для «/start» - команды запуска
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
- python_runner_bot.bot.dp = <Dispatcher '0x7fc18003a530'>¶
Все обработчики должны быть закреплены за объектом Router или Dispatcher (прим. от aiogram)
- python_runner_bot.bot.exec_limit = <asyncio.locks.Semaphore object at 0x7fc1800a83a0 [unlocked, value:5]>¶
Семафор для ограничения количества одновременно запускаемых контейнеров
- python_runner_bot.bot.extract_code(message: Message) str | None¶
Простой обработчик сообщения, призванный извлечь код из текста сообщения. Ищет первую (предполагается, что она единственная) сущность типа «pre» (форматированный код), а при отсутствии таковой - кодом считается все сообщение после предварительного исключения из него команд бота.
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
Форматированный код, как и команда, является одним из типов сущностей, которые могут присутствовать в сообщении и aiogram в типе Message предоставляет информацию о присутствующих сущностях, в т.ч. позиция с которой сущность начинается и сколько символов занимает. За счет данной информации извлекается содержимое блока кода, либо исключение команды из результата.
- async python_runner_bot.bot.main() None¶
Асинхронная функция старта. Предварительно инициирует: - загрузку локализаций в память - подготовку базы данных - подготовку набора образов Docker (проверка наличия и загрузка при отсутствии таковых)
Далее отправляет к Telegram список поддерживаемых ботом команд, после чего запускает самого бота в работу по механизму «long polling» - периодический опрос серверов Telegram на предмет сообщений для бота.
Фреймворк aiogram имеет предопределенный обработчик для сигнала остановки (SIGINT), в результате которого завершается опрос серверов Telegram на предмет сообщений для бота и выполняются следующие инструкции - в частности, закрытие БД.
- async python_runner_bot.bot.process_code_message(message: Message) None¶
Обработчик для «/run» - команды запуска указанного в сообщении кода. Команда предназначена для использования в групповых чатах. Аргумент команды - код на языке Python. Вместе с тем, является обработчиком для сообщений напрямую от пользователя (в «личном» чате). В таком случае весь текст сообщения практически считается кодом.
В процессе работы вызывает функцию extract_code, которая призвана выделить из сообщения код.
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
Команда является одним из типов сущностей, которые могут присутствовать в сообщении и aiogram в типе Message предоставляет информацию о присутствующих сущностях, в т.ч. позиция с которой сущность начинается и сколько символов занимает. За счет данной информации и извлекается аргумент команды.
- async python_runner_bot.bot.send_usage_hint(message: Message) None¶
Обработчик для «/help» - команды вызова справки по использованию бота
- Параметры:
message (aiogram.types.Message) – Полученное ботом сообщение
- python_runner_bot.bot.start()¶
Синхронная функция, запускающая работу бота. Задает уровень логгирования и производит запуск асинхронной функции старта
- python_runner_bot.bot.СMD_START = BotCommand(command='start', description='Start using bot')¶
Описание команды старта бота