Convenience tools and wrappers for aiogram
Project description
aiokilogram
Convenience tools and wrappers for aiogram
,
the asynchronous Telegram Bot API framework.
Installation
pip install aiokilogram
Basic Examples
Class-Based Command Handlers
The aiokilogram
toolkit is centered around the notion of class-based
command handlers. Basically this means that you can group several commands
as methods in a class and assign them to message and callback patterns
at class level.
A simplistic bit will look something like this:
import asyncio
import os
from aiokilogram.bot import KiloBot
from aiokilogram.settings import BaseGlobalSettings
from aiokilogram.handler import CommandHandler
from aiokilogram.registration import register_message_handler
class TestCommandHandler(CommandHandler):
@register_message_handler(commands={'hello'})
async def test_handler(self, event) -> None:
await self.send_text(user_id=event.from_user.id, text=f'This is a test reply')
def run_bot():
bot = KiloBot(
global_settings=BaseGlobalSettings(tg_bot_token=os.environ['TG_BOT_TOKEN']),
handler_classes=[TestCommandHandler],
)
asyncio.run(bot.run())
if __name__ == '__main__':
run_bot()
For more info you can take a look at a boilerplate bot with buttons and simple boilerplate bot
Set the TG_BOT_TOKEN
env variable to run them.
Action Buttons
The package also provides a simplified mechanism of using buttons and binding handlers to their callbacks. This is useful when you want your buttons to contain a combination of several parameters and don't want to implement their serialization, deserialization and callback bindings each time.
The idea is simple.
- Define an action (a
CallbackAction
subclass) using a combination of fields:
from enum import Enum
from aiokilogram.action import CallbackAction, StringActionField, EnumActionField
class ActionType(Enum):
show_recipe = 'show_recipe'
like_recipe = 'like_recipe'
class SingleRecipeAction(CallbackAction):
action_type = EnumActionField(enum_cls=ActionType)
recipe_title = StringActionField()
- Create a page containing action buttons:
from aiokilogram.page import ActionMessageButton, MessagePage, MessageBody, MessageKeyboard
page = MessagePage(
body=MessageBody(text='Main Recipe Menu'),
keyboard=MessageKeyboard(buttons=[
ActionMessageButton(
text='Button Text',
action=SingleRecipeAction(
action_type=ActionType.show_recipe,
recipe_title='Fantastic Menemen',
),
),
# ...
])
)
- Send it as a response to some command in your handler class:
await self.send_message_page(user_id=event.from_user.id, page=page)
- Define and register a handler method for this action where you deserialize the action parameters and somehow use them in your logic:
class MyHandler(CommandHandler):
@register_callback_query_handler(action=SingleRecipeAction)
async def do_single_recipe_action(self, query: types.CallbackQuery) -> None:
action = SingleRecipeAction.deserialize(query.data)
if 'soup' in action.recipe_title.lower():
do_soup_stuff() # whatever
# ...
or you can be more precise and limit the binding to specific values of the action's fields:
@register_callback_query_handler(
action=SingleRecipeAction.when(action_type=ActionType.like_recipe),
)
See boilerplate bot with buttons
Set the TG_BOT_TOKEN
env variable to run it.
Links
Homepage on GitHub: https://github.com/altvod/aiokilogram
Project's page on PyPi: https://pypi.org/project/aiokilogram/
aiogram
's homepage on GitHub: https://github.com/aiogram/aiogram
Telegram Bot API: https://core.telegram.org/bots/api
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aiokilogram-0.1.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 089336a7b409475b2856cbf6a713bb9015f1c730cfc23bba0769fc446286dc48 |
|
MD5 | 5ce9e4957027ec5b5b396a49412a00cf |
|
BLAKE2b-256 | a921e066dd60aee6f006a582efa522aeebdfedba6fb2db482b576e9c18fb993e |