Zpět na domů

obabot pro Telegram a Max boty

obabot — asynchronní Python knihovna pro spouštění botů v Telegramu a Max s jednotným aiogram-kompatibilním API. Podporuje FSM, filtry, klávesnice. Migrace minimální, testovací režim bez tokenů.

Spuštění bota v Telegramu a Max s obabot
Advertisement 728x90

obabot: Univerzální knihovna pro boty v Telegramu a Maxu

Knihovna obabot umožňuje nasadit jednoho asynchronního Python bota současně v Telegramu a Maxu. API je plně kompatibilní s aiogram 3.x: pro Telegram se používá nativní aiogram, pro Max – adaptér, který převádí události na kompatibilní objekty. Instalace vyžaduje jeden příkaz: pip install obabot aiogram>=3.0.0 umaxbot>=0.1.7.

Centrální funkce create_bot() přijímá tokeny platforem a vrací n-tici (bot, dispatcher, router). Handlery zpráv se píší jednotně, nezávisle na platformě.

Příklady inicializace

Pro Telegram:

Google AdInline article slot
from obabot import create_bot
from obabot.filters import Command

bot, dp, router = create_bot(tg_token="VÁŠ_TG_TOKEN")

@router.message(Command("start"))
async def start(message):
    await message.answer(f"Ahoj z {message.platform}!")

await dp.start_polling(bot)

Pro Max:

from obabot import create_bot
from obabot.filters import Command

bot, dp, router = create_bot(max_token="VÁŠ_MAX_TOKEN")

@router.message(Command("start"))
async def start(message):
    await message.answer(f"Ahoj z {message.platform}!")

await dp.start_polling(bot)

Pro obě platformy paralelně:

from obabot import create_bot
from obabot.filters import Command

bot, dp, router = create_bot(
    tg_token="VÁŠ_TG_TOKEN",
    max_token="VÁŠ_MAX_TOKEN"
)

@router.message(Command("start"))
async def start(message):
    await message.answer(f"Ahoj z {message.platform}!")

await dp.start_polling(bot)

Atribut message.platform vrací "telegram" nebo "max" pro logiku závislou na platformě.

Google AdInline article slot

Migrace z aiogram

Přechod z čistého aiogram 3.x minimalizuje změny: nahradit importy a volání create_bot() místo samostatných Bot, Dispatcher, Router.

Původní kód v aiogram:

from aiogram import Bot, Dispatcher, Router
from aiogram.filters import Command
from aiogram.fsm.state import State, StatesGroup
from aiogram.fsm.context import FSMContext

bot = Bot(token="TOKEN")
dp = Dispatcher()
router = Router()
dp.include_router(router)

@router.message(Command("start"))
async def start(message):
    await message.answer("Ahoj!")

await dp.start_polling(bot)

Po migraci:

Google AdInline article slot
from obabot import create_bot
from obabot.filters import Command
from obabot.fsm import State, StatesGroup, FSMContext

bot, dp, router = create_bot(tg_token="TOKEN")

@router.message(Command("start"))
async def start(message):
    await message.answer("Ahoj!")

await dp.start_polling(bot)

Zbytek kódu, včetně FSM, filtrů a klávesnic, zůstává nezměněn.

Rozhraní Message a základní metody

Všechny objekty Message implementují jednotné rozhraní:

  • message.text — text
  • message.from_user — odesílatel
  • message.chat — chat
  • message.message_id — ID
  • message.platform — platforma

Metody:

  • await message.answer("Odpověď")
  • await message.reply("Odpovědět na zprávu")
  • await message.delete()
  • await message.edit_text("Nový text")

FSM: stavový stroj

FSM je identický s aiogram:

from obabot.fsm import State, StatesGroup, FSMContext

class Form(StatesGroup):
    name = State()
    age = State()

@router.message(Command("start"))
async def start(message, state: FSMContext):
    await state.set_state(Form.name)
    await message.answer("Jak se jmenuješ?")

@router.message(Form.name)
async def process_name(message, state: FSMContext):
    await state.update_data(name=message.text)
    await state.set_state(Form.age)
    await message.answer("Kolik ti je let?")

Inline klávesnice a filtry

Vytvoření klávesnice:

from obabot.types import InlineKeyboardMarkup, InlineKeyboardButton

keyboard = InlineKeyboardMarkup(inline_keyboard=[
    [
        InlineKeyboardButton(text="Tlačítko 1", callback_data="btn1"),
        InlineKeyboardButton(text="Tlačítko 2", callback_data="btn2"),
    ]
])

await message.answer("Vyberte:", reply_markup=keyboard)

Filtry:

  • @router.message(Command("start", "help")) — více příkazů
  • @router.message(F.text.startswith("!")) — prefix
  • @router.message(F.photo) — foto
  • @router.callback_query(F.data == "click") — callback

Testování bez tokenů

Režim test_mode=True vylučuje síťová volání:

bot, dp, router = create_bot(test_mode=True)

Podpora Python 3.10–3.14, aiogram 3.0.0–3.24. Úplné pokrytí unit testy.

Co je důležité

  • Jednotný kód: jeden handler pro Telegram a Max, bez adaptérů.
  • Kompatibilita: 100% API aiogram 3.x + atribut platform.
  • FSM a filtry: plná podpora stavů, inline klávesnic, magických filtrů F.
  • Migrace: nahrazení 2 řádků importů a inicializace.
  • Testování: izolovaný režim bez API volání.

— Editorial Team

Advertisement 728x90

Číst dál