xtgbot


Namextgbot JSON
Version 0.0.7 PyPI version JSON
download
home_pagehttps://github.com/vi_is_ramen/xtgbot
SummaryLow-level Python library for interacting with the Telegram Bot API
upload_time2025-07-17 20:48:41
maintainerNone
docs_urlNone
authorIvan Chetchasov
requires_python>=3.10
licenseNone
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # xtgbot

[Телега по библиотеке](https://t.me/xtgbot_chat)

## Обзор

XTGBot - это низкоуровневая, высокопроизводительная библиотека для работы с Telegram Bot API, обеспечивающая:
- Полную совместимость с официальной документацией Telegram
- Минимальные накладные расходы
- Поддержку фильтров и роутеров
- Подробные docstring для всех методов и типов
- Автоматическую генерацию кода методов API

## Ключевые особенности

- Скорость: Оптимизирована для быстрой работы за счет минималистичной реализации
- Расширяемость: Встроенные роутеры и фильтры для удобной обработки сообщений
- Автогенерация: Все типы и методы API генерируются автоматически
- Подробная документация: Все классы и методы содержат детальные docstring

## Установка
```bash
pip install xtgbot
```

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

### Пример бота

```python
from xtgbot import Bot, Router, Fs
from xtgbot.tg.types import Message

# Создаем бота
bot = Bot("YOUR_BOT_TOKEN")

# Создаем роутер
router = Router()

@router.connect
@Fs.on_command("start")
async def start_handler(message: Message):
    await bot.do.sendMessage(
        chat_id=message.chat.id,
        text="Привет! Я работаю!"
    )

# Подключаем роутер к боту
router.connect(bot)

# Запускаем бота
bot.start_polling()
```

## Основные компоненты

### 1. Класс Bot
Центральный класс для управления ботом:
```python
class Bot:
    def __init__(self, token: str)
    def start_polling(self, timeout: int = 0, allowed_updates: list = [...])
    async def stop(self)
    async def pause(self)
    async def resume(self)
    def bot_handler(self, fn: Callable[[Update], Any])
```

#### Пример использования:

```python
bot = Bot("TOKEN")

@bot.bot_handler
async def handle_updates(update: Update):
    print(f"Received update: {update.update_id}")

bot.start_polling()
```

### 2. Класс Router

Для организации обработчиков:

```python
class Router:
    def connect(self, node: Router | Callable | Bot)
    def connect_hi(self, node: Router | Callable | Bot)
    def disconnect(self, node: Router | Callable | Bot)
```

Пример:

```python
router = Router()

@router.connect
@Fs.on_message
async def echo_handler(message: Message):
    await bot.do.sendMessage(
        chat_id=message.chat.id,
        text=message.text
    )

router.connect(bot)
```

### 3. Фильтры

Базовые фильтры:

```python
Filter(**kwargs)
```
Встроенные пресеты (Fs):
```python
Fs.on_message
Fs.on_command(command: str)
Fs.on_any_command
Fs.on_callback
```
AIOgram-like фильтр (F):
```python
F  # Магический фильтр в стиле AIOgram
```
Пример использования фильтров:
```python
@router.connect
@Fs.on_command("help")
async def help_handler(message: Message):
    ...

@router.connect
@F(F.data == "btn0")
async def button_handler(callback: CallbackQuery):
    ...
```

### 4. User State
Для управления состоянием:

```python
class UserState:
    def __init__(self, user_id: int)
    def check(self, state: str) -> bool
    def set(self, state: str) -> None
    def filter(self, state: str) -> Callable[[Callable[[Update], Any]], Callable[[Update], Any]]
```
Пример:
```python
@router.connect
@U.filter("start")
@Fs.on_message
async def start_state_handler(message: Message):
    user_state = UserState(message.chat.id)
    user_state.set("next_state")
```

## Структура проекта
```text
xtgbot/
├── bot.py            # Основной класс бота
├── ext.py            # Расширения (роутеры, фильтры)
├── gen.py            # Генератор кода для API методов
└── tg/
    ├── __init__.py   # Экспорт всех типов и методов
    ├── base_type.py  # Базовый тип для данных
    ├── session.py    # Реализация API методов
    ├── types/        # Все типы Telegram API
    └── methods/      # Все методы Telegram API
```

## Генерация кода
Система автоматически генерирует:
- Все типы данных Telegram API
- Все методы Telegram API
- Сессионный клиент с поддержкой всех методов

> NOTE: Реализация в gen.py гарантирует, что библиотека всегда соответствует последней версии Telegram API.

## Примеры использования

### Обработка сообщений

```python
@router.connect
@Fs.on_message
async def echo(message: Message):
    if message.text:
        await bot.do.sendMessage(
            chat_id=message.chat.id,
            text=f"Вы сказали: {message.text}"
        )
```

### Работа с кнопками

```python
from xtgbot.tg.types import InlineKeyboardMarkup, InlineKeyboardButton

@router.connect
@Fs.on_command("start")
async def start(message: Message):
    await bot.do.sendMessage(
        chat_id=message.chat.id,
        text="Выберите действие:",
        reply_markup=InlineKeyboardMarkup(
            inline_keyboard=[[
                InlineKeyboardButton(text="Нажми меня", callback_data="test")
            ]]
        )
    )

@router.connect_hi
@Fs.on_callback
@F(F.data == "test")
async def callback_handler(callback: CallbackQuery):
    await bot.do.answerCallbackQuery(
        callback_query_id=callback.id,
        text="Вы нажали кнопку!"
    )

@router.connect
@Fs.on_callback
async def callback_handler(callback: CallbackQuery):
    await bot.do.answerCallbackQuery(
        callback_query_id=callback.id,
        text="Вы нажали на неизвестную кнопку!"
    )
```

## Полная документация

Все классы и методы содержат подробные docstring с описанием параметров и примеров использования. Для просмотра полной документации используйте:

```python
help(Bot)
help(Router)
help(Fs)
```

## Заключение
XTGBot предоставляет:
- Полную и актуальную реализацию Telegram Bot API
- Высокую производительность
- Гибкую систему фильтров и роутинга
- Удобные инструменты для управления состоянием
- Автоматическую генерацию кода

Библиотека идеально подходит для создания высоконагруженных ботов с минимальными накладными расходами.

# Вклад и поддержка

Для поддержки монетой можете связаться со мной в Telegram [@vi_is_raven](https://t.me/vi_is_raven).

Для вклада, пожалуйста, создавайте issue (GitHub/GitLab/TvoyGit) или pull request (только TvoyGit).

# Последние слова

Методы и типы генерируются с помощью [TgAPIper](https://github.com/vi-is-ramen/tgapiper)

# Ссылки

[Telegram Bot API](https://core.telegram.org/bots/api)

[Telegram](https://t.me/vi_is_raven)

[GitHub](https://github.com/vi_is_ramen/xtgbot)

[GitLab](#)

[TvoyGit](https://tvoygit.ru/vi_is_lonely/xtgbot)

[PyPI](https://pypi.org/project/xtgbot/)

TgAPIper:
- [GitHub](https://github.com/vi_is_ramen/tgapiper)
- [TvoyGit](https://tvoygit.ru/vi_is_lonely/tgapiper)

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/vi_is_ramen/xtgbot",
    "name": "xtgbot",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": null,
    "author": "Ivan Chetchasov",
    "author_email": "vi.is.chapmann@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/64/34/aa906c7c406e3737d198ea1df1970b39b3fd130a07419abb508f38ba933e/xtgbot-0.0.7.tar.gz",
    "platform": null,
    "description": "# xtgbot\n\n[\u0422\u0435\u043b\u0435\u0433\u0430 \u043f\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435](https://t.me/xtgbot_chat)\n\n## \u041e\u0431\u0437\u043e\u0440\n\nXTGBot - \u044d\u0442\u043e \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0430\u044f, \u0432\u044b\u0441\u043e\u043a\u043e\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Telegram Bot API, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0430\u044f:\n- \u041f\u043e\u043b\u043d\u0443\u044e \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c \u0441 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 Telegram\n- \u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b\n- \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0440\u043e\u0443\u0442\u0435\u0440\u043e\u0432\n- \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 docstring \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438 \u0442\u0438\u043f\u043e\u0432\n- \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 API\n\n## \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438\n\n- \u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c: \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u0441\u0447\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\n- \u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c: \u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u0440\u043e\u0443\u0442\u0435\u0440\u044b \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u044b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n- \u0410\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f: \u0412\u0441\u0435 \u0442\u0438\u043f\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b API \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\n- \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f: \u0412\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u0435\u0442\u0430\u043b\u044c\u043d\u044b\u0435 docstring\n\n## \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430\n```bash\npip install xtgbot\n```\n\n## \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442\n\n### \u041f\u0440\u0438\u043c\u0435\u0440 \u0431\u043e\u0442\u0430\n\n```python\nfrom xtgbot import Bot, Router, Fs\nfrom xtgbot.tg.types import Message\n\n# \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0431\u043e\u0442\u0430\nbot = Bot(\"YOUR_BOT_TOKEN\")\n\n# \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0440\u043e\u0443\u0442\u0435\u0440\nrouter = Router()\n\n@router.connect\n@Fs.on_command(\"start\")\nasync def start_handler(message: Message):\n    await bot.do.sendMessage(\n        chat_id=message.chat.id,\n        text=\"\u041f\u0440\u0438\u0432\u0435\u0442! \u042f \u0440\u0430\u0431\u043e\u0442\u0430\u044e!\"\n    )\n\n# \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0440\u043e\u0443\u0442\u0435\u0440 \u043a \u0431\u043e\u0442\u0443\nrouter.connect(bot)\n\n# \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0431\u043e\u0442\u0430\nbot.start_polling()\n```\n\n## \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b\n\n### 1. \u041a\u043b\u0430\u0441\u0441 Bot\n\u0426\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u043e\u0442\u043e\u043c:\n```python\nclass Bot:\n    def __init__(self, token: str)\n    def start_polling(self, timeout: int = 0, allowed_updates: list = [...])\n    async def stop(self)\n    async def pause(self)\n    async def resume(self)\n    def bot_handler(self, fn: Callable[[Update], Any])\n```\n\n#### \u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f:\n\n```python\nbot = Bot(\"TOKEN\")\n\n@bot.bot_handler\nasync def handle_updates(update: Update):\n    print(f\"Received update: {update.update_id}\")\n\nbot.start_polling()\n```\n\n### 2. \u041a\u043b\u0430\u0441\u0441 Router\n\n\u0414\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432:\n\n```python\nclass Router:\n    def connect(self, node: Router | Callable | Bot)\n    def connect_hi(self, node: Router | Callable | Bot)\n    def disconnect(self, node: Router | Callable | Bot)\n```\n\n\u041f\u0440\u0438\u043c\u0435\u0440:\n\n```python\nrouter = Router()\n\n@router.connect\n@Fs.on_message\nasync def echo_handler(message: Message):\n    await bot.do.sendMessage(\n        chat_id=message.chat.id,\n        text=message.text\n    )\n\nrouter.connect(bot)\n```\n\n### 3. \u0424\u0438\u043b\u044c\u0442\u0440\u044b\n\n\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0444\u0438\u043b\u044c\u0442\u0440\u044b:\n\n```python\nFilter(**kwargs)\n```\n\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0441\u0435\u0442\u044b (Fs):\n```python\nFs.on_message\nFs.on_command(command: str)\nFs.on_any_command\nFs.on_callback\n```\nAIOgram-like \u0444\u0438\u043b\u044c\u0442\u0440 (F):\n```python\nF  # \u041c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 \u0432 \u0441\u0442\u0438\u043b\u0435 AIOgram\n```\n\u041f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432:\n```python\n@router.connect\n@Fs.on_command(\"help\")\nasync def help_handler(message: Message):\n    ...\n\n@router.connect\n@F(F.data == \"btn0\")\nasync def button_handler(callback: CallbackQuery):\n    ...\n```\n\n### 4. User State\n\u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c:\n\n```python\nclass UserState:\n    def __init__(self, user_id: int)\n    def check(self, state: str) -> bool\n    def set(self, state: str) -> None\n    def filter(self, state: str) -> Callable[[Callable[[Update], Any]], Callable[[Update], Any]]\n```\n\u041f\u0440\u0438\u043c\u0435\u0440:\n```python\n@router.connect\n@U.filter(\"start\")\n@Fs.on_message\nasync def start_state_handler(message: Message):\n    user_state = UserState(message.chat.id)\n    user_state.set(\"next_state\")\n```\n\n## \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\n```text\nxtgbot/\n\u251c\u2500\u2500 bot.py            # \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043a\u043b\u0430\u0441\u0441 \u0431\u043e\u0442\u0430\n\u251c\u2500\u2500 ext.py            # \u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u0440\u043e\u0443\u0442\u0435\u0440\u044b, \u0444\u0438\u043b\u044c\u0442\u0440\u044b)\n\u251c\u2500\u2500 gen.py            # \u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f API \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n\u2514\u2500\u2500 tg/\n    \u251c\u2500\u2500 __init__.py   # \u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n    \u251c\u2500\u2500 base_type.py  # \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445\n    \u251c\u2500\u2500 session.py    # \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f API \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n    \u251c\u2500\u2500 types/        # \u0412\u0441\u0435 \u0442\u0438\u043f\u044b Telegram API\n    \u2514\u2500\u2500 methods/      # \u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b Telegram API\n```\n\n## \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430\n\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442:\n- \u0412\u0441\u0435 \u0442\u0438\u043f\u044b \u0434\u0430\u043d\u043d\u044b\u0445 Telegram API\n- \u0412\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b Telegram API\n- \u0421\u0435\u0441\u0441\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u0441\u0435\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\n\n> NOTE: \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 gen.py \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 Telegram API.\n\n## \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f\n\n### \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439\n\n```python\n@router.connect\n@Fs.on_message\nasync def echo(message: Message):\n    if message.text:\n        await bot.do.sendMessage(\n            chat_id=message.chat.id,\n            text=f\"\u0412\u044b \u0441\u043a\u0430\u0437\u0430\u043b\u0438: {message.text}\"\n        )\n```\n\n### \u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438\n\n```python\nfrom xtgbot.tg.types import InlineKeyboardMarkup, InlineKeyboardButton\n\n@router.connect\n@Fs.on_command(\"start\")\nasync def start(message: Message):\n    await bot.do.sendMessage(\n        chat_id=message.chat.id,\n        text=\"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435:\",\n        reply_markup=InlineKeyboardMarkup(\n            inline_keyboard=[[\n                InlineKeyboardButton(text=\"\u041d\u0430\u0436\u043c\u0438 \u043c\u0435\u043d\u044f\", callback_data=\"test\")\n            ]]\n        )\n    )\n\n@router.connect_hi\n@Fs.on_callback\n@F(F.data == \"test\")\nasync def callback_handler(callback: CallbackQuery):\n    await bot.do.answerCallbackQuery(\n        callback_query_id=callback.id,\n        text=\"\u0412\u044b \u043d\u0430\u0436\u0430\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0443!\"\n    )\n\n@router.connect\n@Fs.on_callback\nasync def callback_handler(callback: CallbackQuery):\n    await bot.do.answerCallbackQuery(\n        callback_query_id=callback.id,\n        text=\"\u0412\u044b \u043d\u0430\u0436\u0430\u043b\u0438 \u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443!\"\n    )\n```\n\n## \u041f\u043e\u043b\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f\n\n\u0412\u0441\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u0435 docstring \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435:\n\n```python\nhelp(Bot)\nhelp(Router)\nhelp(Fs)\n```\n\n## \u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\nXTGBot \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442:\n- \u041f\u043e\u043b\u043d\u0443\u044e \u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e Telegram Bot API\n- \u0412\u044b\u0441\u043e\u043a\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\n- \u0413\u0438\u0431\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 \u0438 \u0440\u043e\u0443\u0442\u0438\u043d\u0433\u0430\n- \u0423\u0434\u043e\u0431\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u043c\n- \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430\n\n\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u043a\u043e\u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u043e\u0442\u043e\u0432 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0445\u043e\u0434\u0430\u043c\u0438.\n\n# \u0412\u043a\u043b\u0430\u0434 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430\n\n\u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u043e\u043d\u0435\u0442\u043e\u0439 \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0432\u044f\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u043c\u043d\u043e\u0439 \u0432 Telegram [@vi_is_raven](https://t.me/vi_is_raven).\n\n\u0414\u043b\u044f \u0432\u043a\u043b\u0430\u0434\u0430, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0439\u0442\u0435 issue (GitHub/GitLab/TvoyGit) \u0438\u043b\u0438 pull request (\u0442\u043e\u043b\u044c\u043a\u043e TvoyGit).\n\n# \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0441\u043b\u043e\u0432\u0430\n\n\u041c\u0435\u0442\u043e\u0434\u044b \u0438 \u0442\u0438\u043f\u044b \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e [TgAPIper](https://github.com/vi-is-ramen/tgapiper)\n\n# \u0421\u0441\u044b\u043b\u043a\u0438\n\n[Telegram Bot API](https://core.telegram.org/bots/api)\n\n[Telegram](https://t.me/vi_is_raven)\n\n[GitHub](https://github.com/vi_is_ramen/xtgbot)\n\n[GitLab](#)\n\n[TvoyGit](https://tvoygit.ru/vi_is_lonely/xtgbot)\n\n[PyPI](https://pypi.org/project/xtgbot/)\n\nTgAPIper:\n- [GitHub](https://github.com/vi_is_ramen/tgapiper)\n- [TvoyGit](https://tvoygit.ru/vi_is_lonely/tgapiper)\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Low-level Python library for interacting with the Telegram Bot API",
    "version": "0.0.7",
    "project_urls": {
        "Homepage": "https://github.com/vi_is_ramen/xtgbot"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4e1d4bf037b78262f19b333ecb5e492226b850c675f2fa51834d9a2a1df149b2",
                "md5": "6900e27b0bad22471751449e5892138b",
                "sha256": "d6c10d70747f7dbf93d77b373d05a8edab531330ca0abc1620fb6e113033dce0"
            },
            "downloads": -1,
            "filename": "xtgbot-0.0.7-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "6900e27b0bad22471751449e5892138b",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 350591,
            "upload_time": "2025-07-17T20:48:40",
            "upload_time_iso_8601": "2025-07-17T20:48:40.143768Z",
            "url": "https://files.pythonhosted.org/packages/4e/1d/4bf037b78262f19b333ecb5e492226b850c675f2fa51834d9a2a1df149b2/xtgbot-0.0.7-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6434aa906c7c406e3737d198ea1df1970b39b3fd130a07419abb508f38ba933e",
                "md5": "eb6dbba1642b0025e68cb49887f04eb2",
                "sha256": "748aa23dae82ce5ea8152cc534c763b5c3df5eb401dd38b886a2fb362d8de2d2"
            },
            "downloads": -1,
            "filename": "xtgbot-0.0.7.tar.gz",
            "has_sig": false,
            "md5_digest": "eb6dbba1642b0025e68cb49887f04eb2",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 169935,
            "upload_time": "2025-07-17T20:48:41",
            "upload_time_iso_8601": "2025-07-17T20:48:41.459410Z",
            "url": "https://files.pythonhosted.org/packages/64/34/aa906c7c406e3737d198ea1df1970b39b3fd130a07419abb508f38ba933e/xtgbot-0.0.7.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-17 20:48:41",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "vi_is_ramen",
    "github_project": "xtgbot",
    "github_not_found": true,
    "lcname": "xtgbot"
}
        
Elapsed time: 2.08198s