Skip to main content

A lightweight framework for creating Telegram bots with advanced routing and localization.

Project description

Bojango

Bojango — это фреймворк для упрощения разработки Telegram-ботов. Он предоставляет удобные инструменты для маршрутизации, управления экранами, локализации и работы с асинхронными функциями.

Особенности

  • Маршрутизация: Используйте удобные декораторы для регистрации команд и callback-обработчиков.
  • Управление экранами: Легко создавайте и рендерьте интерфейсы с кнопками.
  • Локализация: Поддержка мультиязычных приложений с помощью gettext.
  • Асинхронная архитектура: Полная поддержка asyncio для высокопроизводительных приложений.
  • Гибкость: Возможность расширения и кастомизации под ваши задачи.

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

1. Установка и настройка

Установить Bojango можно через pip:

pip install bojango

Создайте файл bot.py и настройте бота:

from bojango.bot import BojangoBot, BojangoBotConfig

config = BojangoBotConfig(
    api_token='YOUR_BOT_TOKEN',
    handlers_modules=['handlers']
)

bot = BojangoBot(config)
bot.run()

2. Регистрация команд

Создайте файл handlers.py и добавьте команду:

from bojango.core.routing import command
from bojango.action.screen import ActionScreen

@command('start')
async def start_command(update, context):
    yield ActionScreen(text='Добро пожаловать! Этот бот создан с помощью bojango')

3. Запуск бота

Запустите бота:

python bot.py

Базовые сущности

ActionManager

ActionManager - отвечает за регистрацию и выполнение действий. Позволяет добавлять и получать действия по имени, а также выполнять их с передачей аргументов.

Пример регистрации и выполнения действия:

from bojango.action.dispatcher import ActionManager


async def my_action(update, context, args):
	await update.message.reply_text('Привет! Это кастомное действие.')


manager = ActionManager()
manager.register_action('custom_action', my_action)

# Выполнение действия
await manager.execute_action('custom_action', update, context)

ActionButton

ActionButton - кнопка, связанная с определённым действием или ссылкой.

Пример создания кнопки:

from bojango.action.screen import ActionButton

button = ActionButton('Подробнее', action_name='details')

ActionScreen

ActionScreen - представляет собой экран с текстом и кнопками, который может отображаться пользователю.

Пример создания и отображения экрана:

from bojango.action.screen import ActionScreen, ActionButton, ScreenType

screen = ActionScreen(
    text='Выберите действие:',
    buttons=[[ActionButton('Нажми меня', action_name='next_step')]],
    screen_type=ScreenType.NEW  # По умолчанию ScreenType.EDIT
)
await screen.render(update, context)

Роутинг и регистрация действий

Bojango предоставляет гибкую систему маршрутизации для обработки команд, callback-запросов и текстовых сообщений. Все маршруты регистрируются через Router и связываются с соответствующими обработчиками.

Регистрация команд

Команды регистрируются с помощью декоратора @command. При вызове соответствующей команды в Telegram-боте срабатывает привязанный обработчик, который может отправлять пользователю ActionScreen. Функция обернутая декоратором @command обязательно должна принимать update и context.

Пример регистрации команды /start, предполагаются что уже зарегистрированы next_step и about:

from bojango.core.routing import command
from bojango.action.screen import ActionScreen, ActionButton, ScreenType

@command('start')
async def start_command(update, context):
    yield ActionScreen(
        text='Добро пожаловать! Выберите действие:',
        buttons=[
            [ActionButton(text='Далее', action_name='next_step')],
            [ActionButton(text='О нас', action_name='about')]
        ],
        screen_type=ScreenType.NEW  # По умолчанию ScreenType.EDIT
    )

Регистрация callback-запросов

Для обработки callback-запросов (например, нажатия кнопок) используется декоратор @callback. Callback-запросы позволяют передавать дополнительные параметры и менять отображение экрана. Функция обернутая декоратором @callback обязательно должна принимать update, context и args.

Пример callback-обработчика:

from bojango.core.routing import callback
from bojango.action.screen import ActionScreen, ActionButton

@callback('next_step')
async def next_step_callback(update, context, args):
    yield ActionScreen(
        text='Вы перешли на следующий шаг!',
        buttons=[[ActionButton(text='Назад', action_name='start')]]
    )

Регистрация обработчиков сообщений

Можно регистрировать обработчики текстовых сообщений, например, для обработки пользовательского ввода. Функция обернутая декоратором message обязательно должна принимать update и context.

from bojango.core.routing import message
from bojango.action.screen import ActionScreen, ActionButton

@message()
async def handle_text_message(update, context):
    user_text = update.message.text
    yield ActionScreen(
        text=f'Вы написали: {user_text}',
        buttons=[[ActionButton(text='Ок', action_name='start')]]
    )

В Bojango можно фильтровать входящие текстовые сообщения, используя параметр pattern в декораторе @message. Это позволяет обрабатывать только определенные сообщения, например, команды, номера телефонов или адреса электронной почты.

from bojango.core.routing import message
from bojango.action.screen import ActionScreen, ActionButton

@message(pattern=r'^\d{10}$')  # Фильтруем только 10-значные числа (например, номера телефонов без кода страны)
async def phone_number_handler(update, context):
    yield ActionScreen(
        text='Вы отправили номер телефона!',
        buttons=[[ActionButton(text='Назад', action_name='start')]]
    )

Фильтрация e-mail адресов

from bojango.core.routing import message
from bojango.action.screen import ActionScreen, ActionButton

@message(pattern=r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
async def email_handler(update, context):
    yield ActionScreen(
        text='Вы отправили e-mail!',
        buttons=[[ActionButton(text='Ок', action_name='start')]]
    )

Фильтрация сообщений, содержащих слово 'привет'

from bojango.core.routing import message
from bojango.action.screen import ActionScreen, ActionButton

@message(pattern=r'.*привет.*')
async def hello_handler(update, context):
    yield ActionScreen(
        text='Привет! Как я могу помочь?',
        buttons=[[ActionButton(text='Меню', action_name='start')]]
    )

Редирект

В Bojango метод ActionManager.redirect позволяет перенаправлять пользователя на другое действие без необходимости повторного вызова обработчика вручную. Это полезно, когда нужно динамически менять экраны в зависимости от контекста.

from bojango.core.routing import callback, message

from bojango.action.dispatcher import ActionManager
from bojango.action.screen import ActionScreen


@callback('start_screen')
async def start_screen(update, context, args):
	yield ActionScreen(text='Это приветственный экран')


@message
async def check_numbers(update, context, args):
	if update.message.text.lower() == 'Привет':
		await ActionManager.redirect('start_screen', update, context)
	else:
		yield ActionScreen(text=f'Вы написали: {update.message.text}')

Редирект возможен только на функции, обернутые декоратором @callback.

Привязка маршрутов к боту

Все зарегистрированные маршруты автоматически привязываются к Telegram-приложению при запуске BojangoBot. Однако, если требуется вручную привязать их, можно использовать Router:

from bojango.core.routing import Router

router = Router()
router.register_command('start', start_command)
router.register_callback('next_step', next_step_callback)
router.register_message(handle_text_message)

Требования

  • Python 3.10+
  • Telegram Bot API

Лицензия

Bojango распространяется под лицензией MIT. Подробнее см. в файле LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bojango-1.1.14.tar.gz (25.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bojango-1.1.14-py3-none-any.whl (28.9 kB view details)

Uploaded Python 3

File details

Details for the file bojango-1.1.14.tar.gz.

File metadata

  • Download URL: bojango-1.1.14.tar.gz
  • Upload date:
  • Size: 25.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for bojango-1.1.14.tar.gz
Algorithm Hash digest
SHA256 3a52ae9ab1f41bfcd1f458b88502e046066b10ef54cc3ab790c2b624354670e4
MD5 1eb1517043ab9f3f318f7b6f6d5dc3b1
BLAKE2b-256 25e82c54e005c256000928edf9581f9af3611db8758925bd1ca75e3e84ca2e15

See more details on using hashes here.

File details

Details for the file bojango-1.1.14-py3-none-any.whl.

File metadata

  • Download URL: bojango-1.1.14-py3-none-any.whl
  • Upload date:
  • Size: 28.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.6

File hashes

Hashes for bojango-1.1.14-py3-none-any.whl
Algorithm Hash digest
SHA256 1e1c6cdf5056bb2b96f7cc68ded628bc65ecbc4e8fa25ac0265c80bab82722a8
MD5 3fd30e74b76318ca8b21d8ed3a1e3e0d
BLAKE2b-256 499d9e388e36709456b447bf8fa8a3aeabe0b96f67b305cd77a4f1eff33d6c8f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page