🌙

Быстрый старт

Быстрый старт

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.php
  • Dispatcher — разбирает апдейты и раздаёт их хендлерам
  • @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 просмотра