# 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"
}