Начало работы¶
Установка¶
Требования:
Python: >=3.12,<3.15
Токен бота, его необходимо получить на платформе для партнеров
uv add maxo
poetry add maxo
pip install maxo
Дополнительные зависимости:
'maxo[dishka]'- для поддержки DI черезdishka'maxo[redis]'- для использованияRedisStorageв качестве FSM-хранилища'maxo[magic_filter]'- для использованияMagicFilterдля условий срабатывания обработчиков
Примечание
Если вы используете FSM, мы рекомендуем использовать redis как хранилище состояний в production-среде.
Быстрый старт¶
Больше примеров в examples на GitHub.
1import logging
2import os
3
4from maxo import Bot, Dispatcher
5from maxo.routing.updates import MessageCreated
6from maxo.transport.long_polling import LongPolling
7
8bot = Bot(os.environ["TOKEN"])
9dispatcher = Dispatcher()
10
11@dispatcher.message_created()
12async def echo_handler(update: MessageCreated) -> None:
13 text = update.message.body.text or "Текста нет"
14 await update.answer_text(text)
15
16logging.basicConfig(level=logging.INFO)
17LongPolling(dispatcher).run(bot)
1import logging
2import os
3
4from maxo import Bot, Dispatcher, Router
5from maxo.routing.filters import CommandStart
6from maxo.routing.updates import MessageCreated
7from maxo.transport.long_polling import LongPolling
8
9bot = Bot(os.environ["TOKEN"])
10router = Router()
11
12@router.message_created(CommandStart())
13# или @router.message_created(Command("start"))
14async def start_handler(update: MessageCreated) -> None:
15 await update.answer_text("Привет! Я бот")
16
17def main():
18 logging.basicConfig(level=logging.INFO)
19 dispatcher = Dispatcher()
20 dispatcher.include(router)
21 LongPolling(dispatcher).run(bot)
22
23if __name__ == "__main__":
24 main()
1import logging
2import os
3
4from magic_filter import F
5
6from maxo import Bot, Dispatcher, Router
7from maxo.integrations.magic_filter import MagicFilter
8from maxo.routing.filters import CommandStart
9from maxo.routing.updates import MessageCallback, MessageCreated
10from maxo.transport.long_polling import LongPolling
11from maxo.utils.builders import KeyboardBuilder
12
13bot = Bot(os.environ["TOKEN"])
14router = Router()
15
16@router.message_created(CommandStart())
17async def start_handler(message: MessageCreated) -> None:
18 keyboard = (
19 KeyboardBuilder()
20 .add_callback(
21 text="Нажми меня",
22 payload="my_callback",
23 )
24 .build()
25 )
26 await message.answer_text(
27 "Это сообщение с клавиатурой:",
28 keyboard=keyboard,
29 )
30
31@router.message_callback(MagicFilter(F.payload == "my_callback"))
32async def button_handler(
33 callback: MessageCallback,
34 bot: Bot,
35) -> None:
36 await callback.callback_answer("Вы нажали на кнопку!")
37 await bot.send_message(
38 user_id=callback.user.user_id,
39 text="Вы нажали на кнопку!",
40 )
41
42def main():
43 logging.basicConfig(level=logging.INFO)
44 dispatcher = Dispatcher()
45 dispatcher.include(router)
46 LongPolling(dispatcher).run(bot)
47
48if __name__ == "__main__":
49 main()