Быстрый старт
Быстрый старт
import asyncio
from pykodaribot import Bot, Dispatcher, filters
bot = Bot("bot_ВАШ_ТОКЕН")
dp = Dispatcher()
@dp.message(filters.command("start"))
async def start(msg):
await msg.answer("Привет! Я бот.")
@dp.message()
async def echo(msg):
if msg.text:
await msg.reply(msg.text)
asyncio.run(dp.start_polling(bot))
Как это работает
Bot— клиент API: принимает токен и шлёт запросы кhttps://api.kodari.ru/msg/bot.phpDispatcher— разбирает апдейты и раздаёт их хендлерам@dp.message(фильтр)— регистрирует async-функцию как обработчикdp.start_polling(bot)— бесконечный циклgetUpdatesс обработкой ошибок сети
Хендлеры проверяются сверху вниз, срабатывает первый подходящий. Хендлер без фильтров принимает всё, поэтому его регистрируют последним.
Контекстный менеджер
async def main():
async with Bot("bot_ВАШ_ТОКЕН") as bot:
me = await bot.get_me()
print(me.username)
asyncio.run(main())
async with гарантирует закрытие HTTP-сессии. Без него вызывайте await bot.close() вручную.
Бот с кнопками
import asyncio
from pykodaribot import Bot, Dispatcher, InlineKeyboardMarkup, InlineKeyboardButton, filters
bot = Bot("bot_ВАШ_ТОКЕН")
dp = Dispatcher()
kb = InlineKeyboardMarkup(inline_keyboard=[[
InlineKeyboardButton(text="Да", callback_data="yes"),
InlineKeyboardButton(text="Нет", callback_data="no"),
]])
@dp.message(filters.command("ask"))
async def ask(msg):
await msg.answer("Продолжаем?", reply_markup=kb)
@dp.callback_query(filters.callback_data("yes"))
async def yes(cb):
await cb.answer()
await cb.message.answer("Поехали!")
@dp.callback_query(filters.callback_data("no"))
async def no(cb):
await cb.answer()
await cb.message.answer("Хорошо, отменяю.")
asyncio.run(dp.start_polling(bot))
Один экземпляр на токен
Сервер разрешает только один активный getUpdates на бота. Две запущенные копии — и вторая получит BotError с кодом 409. Останавливайте старый процесс перед запуском нового.
32 просмотра