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:
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ě.
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:
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— textmessage.from_user— odesílatelmessage.chat— chatmessage.message_id— IDmessage.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
Zatím žádné komentáře.