Skip to main content

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.

  1. 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()
  1. 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',
            ),
        ),
        # ...
    ])
)
  1. 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)
  1. 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.

Error handling

Generic error (exception) handling in bots can be implemented via ErrorHandlers at class or method level.

First, define an error handler:

from aiokilogram.errors import DefaultErrorHandler

class MyErrorHandler(DefaultErrorHandler):
    def make_message(self, err: Exception):
        # Any custom logic can go here.
        # This method can return either a `str`, a `MessagePage` or `None`.
        # In case of `None` no message is sent and the exception is re-raised.
        return 'This is my error message'

Then add it either to the message handler class:

class MyCommandHandler(CommandHandler):
    error_handler = MyErrorHandler()

to handle errors in all methods registered via the register_message_handler and register_callback_query_handler decorators.

Or you can do it at method-level:

    @register_message_handler(commands={'my_command'}, error_handler=MyErrorHandler())
    async def my_command_handler(self, event: types.Message) -> None:
        pass  # do whatever you do...

See boilerplate bot with error handling

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

Download files

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

Source Distribution

aiokilogram-0.1.3.tar.gz (11.8 kB view details)

Uploaded Source

Built Distribution

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

aiokilogram-0.1.3-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file aiokilogram-0.1.3.tar.gz.

File metadata

  • Download URL: aiokilogram-0.1.3.tar.gz
  • Upload date:
  • Size: 11.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for aiokilogram-0.1.3.tar.gz
Algorithm Hash digest
SHA256 333591235bde5c88dad8044862cf8a8aceb8c5702fc1fdfd87bac0da8decf7a7
MD5 8dc81e44c19be7b0c618f277e7c66fbf
BLAKE2b-256 ee32becb3c0d5a6c0039fac376a1f3ca9f28078a717abf62e7276aa0edf8db06

See more details on using hashes here.

File details

Details for the file aiokilogram-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: aiokilogram-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.6.0 importlib_metadata/4.8.2 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.10.0

File hashes

Hashes for aiokilogram-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 e79a1cf0def0e6a972c8a32ce782e3ca6d46744e82fc2ff77ba959d2f3d10da9
MD5 5d04d6095acdafcc4059e3f0585ef1ec
BLAKE2b-256 f53ec013280c759ed7a3e51e608f14c4674e4ddb4c7e19a584f54c49b32a3c11

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 files

0.1.2

2 files

0.1.1

2 files

0.1.0

2 files

0.0.15

2 files

0.0.14

2 files

0.0.13

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Supported by

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