Skip to main content

Vondic Botik SDK - Telegram Bot Framework for Vondic Platform

Project description

BotikSDK

Telegram Bot Framework для платформы Vondic.

Установка

pip install botiksdk

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

import asyncio
from botiksdk import Bot, Dispatcher, Command, InlineKeyboardBuilder, InlineKeyboardButton

dp = Dispatcher()
bot = Bot(token="your-bot-token", base_url="http://localhost:5050")

@dp.message(Command("start"))
async def cmd_start(message, bot, state):
    builder = InlineKeyboardBuilder()
    builder.add(InlineKeyboardButton(text="Нажми меня", callback_data="pressed"))
    await bot.send_message(
        str(message.chat.id),
        "Привет!",
        reply_markup=builder.as_markup(),
    )

@dp.callback_query(lambda c: c.data == "pressed")
async def on_button_pressed(callback, bot, state):
    await bot.send_message(
        str(callback.message.chat.id),
        "Кнопка нажата!",
    )
    await bot.answer_callback_query(callback.id)

async def main():
    await dp.start_polling(bot)

if __name__ == "__main__":
    asyncio.run(main())

Возможности

  • Dispatcher - диспетчер для обработки обновлений
  • Router - маршрутизатор для группировки хендлеров
  • FSM (Finite State Machine) - машина состояний для диалогов
  • Filters - фильтры для сообщений и callback query
  • Inline Keyboard - конструктор кнопок

Классы

Bot

Основной класс для взаимодействия с API:

bot = Bot(
    bot_id="your-bot-id",  # опционально
    token="your-bot-token",
    base_url="http://localhost:5050",  # опционально
)

Методы:

  • send_message(chat_id, text, parse_mode, reply_markup) - отправка сообщения
  • answer_callback_query(callback_query_id, text, show_alert) - ответ на callback
  • get_updates(offset, limit, timeout) - получение обновлений
  • get_user_profile_photos(user_id, limit) - получение фото профиля
  • get_file(file_id) - получение файла

Dispatcher

Диспетчер для обработки обновлений:

dp = Dispatcher()

@dp.message(Command("start"))
async def start_handler(message, bot, state):
    ...

@dp.callback_query(lambda c: c.data.startswith("buy_"))
async def buy_handler(callback, bot, state):
    ...

@dp.message(lambda m: m.text is not None, state="some_state")
async def state_handler(message, bot, state):
    ...

FSMContext

Контекст машины состояний:

@dp.message(Command("email"))
async def ask_email(message, bot, state):
    await state.set_state("waiting_email")
    await bot.send_message(str(message.chat.id), "Введите email:")

@dp.message(lambda m: m.text is not None, state="waiting_email")
async def receive_email(message, bot, state):
    await state.update_data(email=message.text)
    await state.clear()

Filters

Встроенные фильтры:

  • Command("start", "help") - команды
  • Text(equals="hello") - точное совпадение текста
  • Text(contains="world") - текст содержит подстроку
  • Regex(r"\d+") - регулярное выражение
  • F.message.text.contains("hello") - фильтр по полю
  • lambda c: c.data.startswith("buy_") - lambda фильтр

InlineKeyboardBuilder

Конструктор кнопок:

builder = InlineKeyboardBuilder()
builder.row(
    InlineKeyboardButton(text="Кнопка 1", callback_data="btn1"),
    InlineKeyboardButton(text="Кнопка 2", callback_data="btn2"),
)
builder.add(InlineKeyboardButton(text="URL", url="https://example.com"))
markup = builder.as_markup()

Примеры

Регистрация пользователя

@dp.callback_query(lambda c: c.data == "register")
async def register(callback, bot, state):
    user_id = str(callback.from_user.id)
    # Ваша логика регистрации
    await bot.send_message(
        str(callback.message.chat.id),
        f"Вы зарегистрированы! ID: {user_id}",
    )
    await bot.answer_callback_query(callback.id)

Покупка товаров

@dp.callback_query(lambda c: c.data.startswith("buy_item"))
async def buy_item(callback, bot, state):
    _, item_id = callback.data.split(":")
    # Логика покупки
    builder = InlineKeyboardBuilder()
    builder.add(InlineKeyboardButton(text="Оплатить", url="https://payment.url"))
    await bot.send_message(
        str(callback.message.chat.id),
        f"Товар {item_id} добавлен в корзину",
        reply_markup=builder.as_markup(),
    )
    await bot.answer_callback_query(callback.id)

Машина состояний

class States:
    email = "email"
    password = "password"

@dp.message(Command("login"))
async def login_start(message, bot, state):
    await state.set_state(States.email)
    await bot.send_message(str(message.chat.id), "Введите email:")

@dp.message(lambda m: m.text is not None, state=States.email)
async def login_email(message, bot, state):
    await state.update_data(email=message.text)
    await state.set_state(States.password)
    await bot.send_message(str(message.chat.id), "Введите пароль:")

@dp.message(lambda m: m.text is not None, state=States.password)
async def login_password(message, bot, state):
    data = await state.get_data()
    email = data.get("email")
    password = message.text
    # Логика входа
    await state.clear()
    await bot.send_message(str(message.chat.id), "Вход выполнен!")

Лицензия

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

botiksdk-0.1.1.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

botiksdk-0.1.1-py3-none-any.whl (12.8 kB view details)

Uploaded Python 3

File details

Details for the file botiksdk-0.1.1.tar.gz.

File metadata

  • Download URL: botiksdk-0.1.1.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for botiksdk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 55a42b8893f6453b75ad3d82ab1759a1bcc34133e1fe8ea7d469e6924fd257d9
MD5 774ffd5f3568bc502120bbadc17651ce
BLAKE2b-256 3296069769370191684976d37d0dcf5c05bbc7c317073b5419c9e0718c4731e2

See more details on using hashes here.

File details

Details for the file botiksdk-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: botiksdk-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for botiksdk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 aaf4cbebf23db2118a3430cb088a8efb69a6bd33cb025ee2c5fbd28665892f44
MD5 88825669e0ad2af346a6c00e622c9b08
BLAKE2b-256 8155bf69e4c0ef2ac5f1e66793db11b93d25634a95cfaa9080956b6a71c62f8e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page