Skip to main content

Telegram bot kit

Project description

Bot kit

Создание общего контекста без кнофигурационного файла:

from bot_kit.kit import BotContext
from bot_kit.db import DBManager
from sqlalchemy.ext.declarative import declarative_base

token: str = '123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11'
BaseModel = declarative_base()  # базовый класс для моделей БД
db_manager = DBManager('sqlite:///mybase.db', BaseModel)

bot_context = BotContext(token)
bot_context.set_db_manager(db_manager)

Создание общего контекста через конфигурационный файл:

from bot_kit.kit import BotContext
from bot_kit.common import ConfigBot, INIConfig
from sqlalchemy.ext.declarative import declarative_base

BaseModel = declarative_base()  # базовый класс для моделей БД
config = ConfigBot(INIConfig('settings.ini'))
bot_context = BotContext.init_form_config(config, BaseModel)

Создание простого меню:

Меню создается как класс на основе MenuReplyKeyboard и может быть зарегистрировано через декоратор register_menu. При регистрации контекст для работы с ботом пробрасывается в команды завязанные на кнопки меню. Правила для показа меню моно указать в декораторе, по такому же принципу как и в aiogram или же определить метод check.

from bot_kit.kit import BotCommand, MenuReplyKeyboard, ReplyKeyboardButton, ShowMenuButton
from bot_kit.db import DBManager, ModelManager
from aiogram import types

class FirstCommand(BotCommand):
    async def execute(self, tg_object: types.Message, *args, **kwargs):
        """
        self.db_manager - управление моделями БД
        self.bc - общий контекст
        self.bot - объект бота
        """
        user_manager: ModelManager = self.db_manager.manage(UserModel)
        user_manager.one(chat_id=tg_object.from_user.id)
        await tg_object.answer('first command is finished')


@bot_context.register_menu(text='Меню настройки')
class ConfigMenu(MenuReplyKeyboard):
    COMMAND1 = ReplyKeyboardButton('Команда 1', FirstCommand)

    @classmethod
    def check(cls, tg_object: types.Message) -> bool:
        """Альтернативный метод для проверки вывода меню (если логика довольно сложная для декоратора)"""
        return tg_object.text == '/config'


@bot_context.register_menu(text='Приветствую', commands=['start'])
class MainMenu(MenuReplyKeyboard):
    FIRST_BUTTON = ReplyKeyboardButton('Команда 1', FirstCommand)
    SECOND_BUTTON = ReplyKeyboardButton('Команда 2', FirstCommand)
    SHOW_CONFIG_MENU = ShowMenuButton('Настройки', ConfigMenu)

    @classmethod
    async def before_show(cls, tg_object: types.Message, **kwargs):
        """
        Метод выполняемый перед показом меню
        cls.bc - общий контекст
        """
        db_manager: DBManager = cls.bc.get_db_manager()
        user_manager: ModelManager = db_manager.manage(UserModel)
        user: UserModel = user_manager.one(chat_id=tg_object.from_user.id)
        if not user:
            user_manager.save(UserModel(
                name=tg_object.from_user.first_name,
                last_name=tg_object.from_user.last_name,
                chat_id=tg_object.from_user.id,
            ))

Создание Inline меню:

Inline меню создается по такому же принципу что и основное меню, но родителем в данном случае выступает класс MenuInlineKeyboard.

from bot_kit.kit import BotCommand, MenuInlineKeyboard, InlineButton
from aiogram import types


class SomeInlineCommand(BotCommand):
    async def execute(self, tg_object: types.CallbackQuery, *args, **kwargs):
        pass


@bot_context.register_menu(text='Что делаем?')
class ContextMenu(MenuInlineKeyboard):
    FIRST_BUTTON = InlineButton('Кнопка 1', 'some_command_btn', SomeInlineCommand())

    @classmethod
    def check(cls, tg_object: types.Message) -> bool:
        return True

Создание фоновой задачи выполняемой через определенный интервал:

Периодические задачи можно оформлять как классы-наследники BotTask в этом случае внутри класса будет доступен контекст бота. Или же как обычные функции завернутые в декоратор register_async_timer

from bot_kit.kit import BotTask

@bot_context.register_async_timer(60)   # регистрируем выполнение функции каждую минуту
async def one_more_task():
    pass

class SimpleTask(BotTask):
    async def execute(self, *args, **kwargs):
        """
        self.db_manager - управление моделями БД
        self.bc - общий контекст
        self.bot - объект бота
        """
        pass

bot_context.add_task(SimpleTask(), 600) # запуск задачи раз в 10 минут

Запуск бота:

На текущий момент бота можно запускать только в режиме long polling.

bot_context.start_polling()

Project details


Release history Release notifications | RSS feed

This version

0.1

Download files

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

Source Distribution

bot_kit-0.1.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

bot_kit-0.1-py3-none-any.whl (9.3 kB view details)

Uploaded Python 3

File details

Details for the file bot_kit-0.1.tar.gz.

File metadata

  • Download URL: bot_kit-0.1.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for bot_kit-0.1.tar.gz
Algorithm Hash digest
SHA256 10cee09136054171936ab97b20b6b40d53f46f229f7b926e14bddc45fb58b3ce
MD5 3421d8c67de63c04ba0ef246177202d7
BLAKE2b-256 37f75f48550333bc4241b43236bc8234cf0de3ab0b1d48ad4b02ce4ae7f1a59c

See more details on using hashes here.

File details

Details for the file bot_kit-0.1-py3-none-any.whl.

File metadata

  • Download URL: bot_kit-0.1-py3-none-any.whl
  • Upload date:
  • Size: 9.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.8.5

File hashes

Hashes for bot_kit-0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ba190c3ca2ad4b1392f3f23cfbb5ee945dfcaa02ac2dbafec13aa03fa52c7982
MD5 46058760d1db6ba92144a4d5fa98ce18
BLAKE2b-256 b8e9bb381d84931d89b04f0c2a2a41f613153686c7bb0be2e0dff863aa7fd18a

See more details on using hashes here.

Supported by

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