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()
Metadata
Release files for bot-kit 0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bot_kit-0.1.tar.gz | 9.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bot_kit-0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.0 kB
Release files / bot_kit-0.1.tar.gz
| Download URL | bot_kit-0.1.tar.gz |
|---|---|
| Size | 9.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
10cee09136054171936ab97b20b6b40d53f46f229f7b926e14bddc45fb58b3ce
|
|
BLAKE2b-256 checksum How to use checksums |
37f75f48550333bc4241b43236bc8234cf0de3ab0b1d48ad4b02ce4ae7f1a59c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|
Release files / bot_kit-0.1-py3-none-any.whl
| Download URL | bot_kit-0.1-py3-none-any.whl |
|---|---|
| Size | 9.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ba190c3ca2ad4b1392f3f23cfbb5ee945dfcaa02ac2dbafec13aa03fa52c7982
|
|
BLAKE2b-256 checksum How to use checksums |
b8e9bb381d84931d89b04f0c2a2a41f613153686c7bb0be2e0dff863aa7fd18a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is 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
|