Каждый модуль должен быть классом, унаследованным от loader.Module
и заканчиваться на Mod
.
@loader.module(author="sh1tn3t", version=1)
class ExampleMod(loader.Module):
"""Описание модуля"""
# Код модуля
author
и version
- опциональны.
Для инициализации модуля используйте метод on_load
:
async def on_load(self, app: Client):
"""Вызывается при загрузке модуля"""
logging.info(f"Модуль {self.name} загружен")
Команды создаются как методы класса с суффиксом _cmd
:
async def example_cmd(self, app: Client, message: types.Message, args: str):
"""Описание команды. Использование: example [аргументы]"""
await utils.answer(message, "Пример команды" + (f"\nАргументы: {args}" if args else ""))
args
содержит текст после команды и является необязательным.
Вы можете добавлять фильтры к командам с помощью декоратора @loader.on
:
@loader.on(lambda _, __, m: "тест" in getattr(m, "text", ""))
async def example2_cmd(self, app: Client, message: types.Message):
"""Команда сработает только если в тексте есть 'тест'"""
return await utils.answer(message, "Команда с фильтром")
Для обработки сообщений используйте методы с суффиксом _message_handler
и декоратор @loader.on_bot
:
@loader.on_bot(lambda self, app, message: message.text and message.text.lower() == "ты дурак?")
async def example_message_handler(self, app: Client, message: Message):
"""Ответит на 'ты дурак?'"""
return await message.reply("Сам такой!")
Более подробные параметры можно найти в документации Aiogram 3
или utils.py
async def example_cmd(self, app: Client, message: types.Message):
"""Пример запроса инлайн-команды от лица юзербота."""
await utils.inline(self, message, "команда для инлайн запроса")
Для обработки inline запросов используйте методы с суффиксом _inline_handler
:
@loader.on_bot(lambda self, app, inline_query: True)
async def example_inline_handler(self, app, inline_query, args):
"""Обработка inline запросов. Пример инлайн-команды. Использование: @bot example [аргументы]"""
await utils.answer_inline(inline_query, "Текст который отправится через inline")
Для обработки нажатий на кнопки используйте методы с суффиксом _callback_handler
:
@loader.on_bot(lambda self, app, call: call.data == "example_callback")
async def example_callback_handler(self, app: Client, call: CallbackQuery):
"""Обработка нажатия на кнопку"""
return await call.answer("Пример callback", show_alert=True)
Watchers - функции, которые выполняются при получении новых сообщений:
@loader.on(lambda _, __, m: m and m.text == "Привет, это проверка вотчера")
async def watcher(self, app: Client, message: types.Message):
return await message.reply("Привет, все работает отлично")
async def watcher_(self, app: Client, message: types.Message):
if message.text == "Другой текст":
return await message.reply("Другой ответ")
watcher
. Можно добавлять несколько watchers.
await sleep()
вместо time.sleep()
для асинхронной работыutils.answer()
logging
для вывода отладочной информации