obabot: Universelle Bibliothek für Telegram- und Max-Bots
Die obabot-Bibliothek ermöglicht es Ihnen, einen einzigen asynchronen Python-Bot gleichzeitig auf Telegram und Max bereitzustellen. Ihre API ist vollständig kompatibel mit aiogram 3.x: Sie nutzt aiogram nativ für Telegram und einen Adapter für Max, der Events in kompatible Objekte umwandelt. Die Installation ist ein Einzeiler: pip install obabot aiogram>=3.0.0 umaxbot>=0.1.7.
Die Kernfunktion create_bot() nimmt Plattform-Token entgegen und gibt ein Tupel (bot, dispatcher, router) zurück. Nachrichten-Handler werden einheitlich geschrieben, unabhängig von der Plattform.
Beispiele für die Initialisierung
Für Telegram:
from obabot import create_bot
from obabot.filters import Command
bot, dp, router = create_bot(tg_token="YOUR_TG_TOKEN")
@router.message(Command("start"))
async def start(message):
await message.answer(f"Hi from {message.platform}!")
await dp.start_polling(bot)
Für Max:
from obabot import create_bot
from obabot.filters import Command
bot, dp, router = create_bot(max_token="YOUR_MAX_TOKEN")
@router.message(Command("start"))
async def start(message):
await message.answer(f"Hi from {message.platform}!")
await dp.start_polling(bot)
Für beide Plattformen parallel:
from obabot import create_bot
from obabot.filters import Command
bot, dp, router = create_bot(
tg_token="YOUR_TG_TOKEN",
max_token="YOUR_MAX_TOKEN"
)
@router.message(Command("start"))
async def start(message):
await message.answer(f"Hi from {message.platform}!")
await dp.start_polling(bot)
Das Attribut message.platform gibt "telegram" oder "max" zurück – ideal für plattformspezifische Logik.
Migration von aiogram
Der Wechsel von purem aiogram 3.x erfordert minimale Änderungen: Ersetzen Sie einfach die Imports und verwenden Sie create_bot() statt separater Bot, Dispatcher und Router.
Originaler aiogram-Code:
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("Hi!")
await dp.start_polling(bot)
Nach der Migration:
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("Hi!")
await dp.start_polling(bot)
Der Rest Ihres Codes – inklusive FSM, Filter und Tastaturen – bleibt exakt gleich.
Message-Interface und Basis-Methoden
Alle Message-Objekte teilen eine einheitliche Schnittstelle:
message.text— Textmessage.from_user— Absendermessage.chat— Chatmessage.message_id— IDmessage.platform— Plattform
Methoden:
await message.answer("Antwort")await message.reply("Antwort auf Nachricht")await message.delete()await message.edit_text("Neuer Text")
FSM: Zustandsmaschine
FSM funktioniert genau wie bei 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("Wie heißt du?")
@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("Wie alt bist du?")
Inline-Tastaturen und Filter
Tastatur erstellen:
from obabot.types import InlineKeyboardMarkup, InlineKeyboardButton
keyboard = InlineKeyboardMarkup(inline_keyboard=[
[
InlineKeyboardButton(text="Button 1", callback_data="btn1"),
InlineKeyboardButton(text="Button 2", callback_data="btn2"),
]
])
await message.answer("Wähle einen:", reply_markup=keyboard)
Filter:
@router.message(Command("start", "help"))— mehrere Befehle@router.message(F.text.startswith("!"))— Präfix@router.message(F.photo)— Fotos@router.callback_query(F.data == "click")— Callbacks
Testen ohne Token
test_mode=True überspringt alle Netzwerkaufrufe:
bot, dp, router = create_bot(test_mode=True)
Unterstützt Python 3.10–3.14, aiogram 3.0.0–3.24. Volle Unit-Test-Abdeckung.
Das Wichtigste
- Ein Codebase: Ein Handler für Telegram und Max – keine Adapter nötig.
- Vollständige Kompatibilität: 100% aiogram 3.x API +
platform-Attribut. - FSM und Filter: Voller Support für Zustände, Inline-Tastaturen, Magic-Filter
F. - Einfache Migration: Zwei Import-Zeilen und Initialisierung austauschen.
- Testen: Isolierter Modus ohne API-Aufrufe.
— Editorial Team
Noch keine Kommentare.