Skip to content

goduni/maxo

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

303 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

maxo

maxo

License Status PyPI Downloads GitHub Repo stars Supported python versions Docs Tests Coverage

Асинхронный фреймворк для разработки ботов из max.ru

Документация

Оригинальный репозиторий
maxo/dialogs переделаны из aiogram_dialog

Установка

Через pip:

pip install maxo==0.4.1

В pyproject.toml:

[project]
dependencies = [
    "maxo==0.4.1",
]

Быстрый старт

Больше примеров в примерах

Эхо-бот

import logging
import os

from maxo import Bot, Dispatcher
from maxo.routing.updates.message_created import MessageCreated
from maxo.utils.facades.updates.message_created import MessageCreatedFacade
from maxo.utils.long_polling import LongPolling

bot = Bot(os.environ["TOKEN"])
dispatcher = Dispatcher()

@dispatcher.message_created()
async def echo_handler(update: MessageCreated, facade: MessageCreatedFacade) -> None:
    text = update.message.body.text or "Текста нет"
    await facade.answer_text(text)

logging.basicConfig(level=logging.INFO)
LongPolling(dispatcher).run(bot)

Команды

import logging
import os

from maxo import Bot, Dispatcher, Router
from maxo.routing.filters import CommandStart
from maxo.routing.updates.message_created import MessageCreated
from maxo.utils.facades import MessageCreatedFacade
from maxo.utils.long_polling import LongPolling

bot = Bot(os.environ["TOKEN"])
router = Router()

@router.message_created(CommandStart())
# или @router.message_created(Command("start"))
async def start_handler(update: MessageCreated, facade: MessageCreatedFacade) -> None:
    await facade.answer_text("Привет! Я бот")

def main():
    logging.basicConfig(level=logging.INFO)
    dispatcher = Dispatcher()
    dispatcher.include(router)
    LongPolling(dispatcher).run(bot)

if __name__ == "__main__":
    main()

Клавиатура

import logging
import os

from magic_filter import F

from maxo import Bot, Dispatcher, Router
from maxo.integrations.magic_filter import MagicFilter
from maxo.routing.filters import CommandStart
from maxo.routing.updates import MessageCreated, MessageCallback
from maxo.utils.builders import KeyboardBuilder
from maxo.utils.facades import MessageCallbackFacade, MessageCreatedFacade
from maxo.utils.long_polling import LongPolling

bot = Bot(os.environ["TOKEN"])
router = Router()

@router.message_created(CommandStart())
async def start_handler(
    update: MessageCreated,
    facade: MessageCreatedFacade,
) -> None:
    keyboard = (
        KeyboardBuilder()
        .add_callback(
            text="Нажми меня",
            payload="my_callback",
        )
        .build()
    )
    await facade.answer_text(
        "Это сообщение с клавиатурой:",
        keyboard=keyboard,
    )

@router.message_callback(MagicFilter(F.payload == "my_callback"))
async def button_handler(
    update: MessageCallback,
    facade: MessageCallbackFacade,
    bot: Bot,
) -> None:
    await facade.callback_answer("Вы нажали на кнопку!")
    await bot.send_message(
        user_id=update.user.user_id,
        text="Вы нажали на кнопку!",
    )

def main():
    logging.basicConfig(level=logging.INFO)
    dispatcher = Dispatcher()
    dispatcher.include(router)
    LongPolling(dispatcher).run(bot)

if __name__ == "__main__":
    main()

Связь

Если у вас есть вопросы, вы можете задать их в Телеграме @maxo_py или Максе

About

🐍 Фреймворк для разработки ботов в max.ru

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 98.8%
  • HTML 1.1%
  • Just 0.1%