Skip to main content

Telegram Bot API library

Project description

neogram — документация

neogram — современная Python-библиотека для работы с Telegram Bot API, основанная на curl_cffi. Поддерживает синхронный и асинхронный режимы работы, все официальные типы данных Telegram, а также набор вспомогательных AI-инструментов.


Содержание

  1. Установка
  2. Быстрый старт
  3. Класс Bot
  4. Класс AsyncBot
  5. Обработчики событий
  6. Типы данных Telegram
  7. InputFile — отправка файлов
  8. Обработка ошибок
  9. AI-инструменты (ii.py)
  10. Полный справочник методов Bot API

Установка

pip install curl_cffi beautifulsoup4

Затем поместите папку neogram/ (содержащую fgram.py, ii.py, __init__.py) в директорию вашего проекта.

import neogram

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

Синхронный бот

from neogram import Bot

bot = Bot(token="ВАШ_ТОКЕН")

@bot.message_handler(commands=["start"])
def start(message):
    bot.send_message(message.chat.id, "Привет! Я бот на neogram 🚀")

@bot.message_handler(content_types=["text"])
def echo(message):
    bot.send_message(message.chat.id, f"Вы написали: {message.text}")

bot.infinity_polling()

Асинхронный бот

import asyncio
from neogram import AsyncBot

bot = AsyncBot(token="ВАШ_ТОКЕН")

@bot.message_handler(commands=["start"])
async def start(message):
    await bot.send_message(message.chat.id, "Привет! Я async-бот 🚀")

async def main():
    await bot.infinity_polling()

asyncio.run(main())

Класс Bot

Главный клиент Telegram Bot API. Использует curl_cffi для HTTP-запросов с имитацией браузера.

Конструктор

Bot(
    token: str,
    *,
    api_url: str = "https://api.telegram.org",
    timeout: int = 70,
    impersonate: str = "chrome",
    parse_mode: Optional[str] = None,
    proxies: Optional[dict] = None,
    max_retries: int = 3,
    retry_on_flood: bool = True
)
Параметр Тип По умолчанию Описание
token str Токен бота от @BotFather
api_url str https://api.telegram.org URL Telegram Bot API (для локального сервера)
timeout int 70 Таймаут HTTP-запросов в секундах
impersonate str "chrome" Браузер для имитации (curl_cffi)
parse_mode str None Режим форматирования по умолчанию ("HTML", "Markdown", "MarkdownV2")
proxies dict None Настройки прокси
max_retries int 3 Число повторных попыток при ошибках
retry_on_flood bool True Автоматический retry при flood-ошибке (код 429)

Пример с настройками

bot = Bot(
    token="ВАШ_ТОКЕН",
    parse_mode="HTML",
    max_retries=5,
    proxies={"http": "socks5://127.0.0.1:1080"}
)

Управление поллингом

# Запустить поллинг (блокирующий)
bot.polling(timeout=30, allowed_updates=["message", "callback_query"])

# Запустить поллинг с автовосстановлением при ошибках
bot.infinity_polling()

# Остановить поллинг из другого потока
bot.stop_polling()

Класс AsyncBot

Асинхронная версия Bot. Наследует все методы Bot, но каждый метод является async-функцией, которую нужно вызывать через await.

from neogram import AsyncBot

bot = AsyncBot(token="ВАШ_ТОКЕН", parse_mode="HTML")

@bot.message_handler(commands=["help"])
async def help_handler(message):
    await bot.send_message(message.chat.id, "Список команд: /start, /help")

# Закрыть асинхронную сессию
await bot.aclose()

Обработчики событий

Используйте декораторы для регистрации обработчиков. Работают одинаково для Bot и AsyncBot.

Типы обработчиков

@bot.message_handler(...)          # входящие сообщения
@bot.edited_message_handler(...)   # отредактированные сообщения
@bot.channel_post_handler(...)     # посты в каналах
@bot.callback_query_handler(...)   # нажатия на inline-кнопки
@bot.inline_handler(...)           # inline-запросы
@bot.poll_handler(...)             # обновления опросов
@bot.poll_answer_handler(...)      # ответы на опросы
@bot.my_chat_member_handler(...)   # изменение статуса бота в чате
@bot.chat_member_handler(...)      # изменение статуса участника чата
@bot.chat_join_request_handler(...)# запросы на вступление
@bot.shipping_query_handler(...)   # запросы доставки
@bot.pre_checkout_query_handler(...)# предчекаут платёж

Фильтры для message_handler

@bot.message_handler(commands=["start", "help"])
def cmd_handler(message): ...

@bot.message_handler(content_types=["photo", "video", "document"])
def media_handler(message): ...

@bot.message_handler(regexp=r"^\d+$")
def digits_handler(message): ...

@bot.message_handler(func=lambda m: m.from_user.id == 123456789)
def admin_handler(message): ...

@bot.message_handler(chat_types=["private"])
def private_handler(message): ...

Тип контента (content_types) может быть одним из: "text", "audio", "document", "photo", "sticker", "video", "video_note", "voice", "contact", "location", "venue", "animation", "poll", "dice", "pinned_message", "invoice", "successful_payment", "story" и другие.

Пример: бот с несколькими обработчиками

from neogram import Bot, InputFile

bot = Bot(token="TOKEN", parse_mode="HTML")

@bot.message_handler(commands=["start"])
def start(message):
    bot.send_message(
        message.chat.id,
        f"👋 Привет, <b>{message.from_user.first_name}</b>!"
    )

@bot.message_handler(commands=["photo"])
def send_photo(message):
    with open("photo.jpg", "rb") as f:
        bot.send_photo(message.chat.id, InputFile(f), caption="Вот фото!")

@bot.callback_query_handler(func=lambda cb: cb.data.startswith("btn_"))
def on_button(callback):
    bot.answer_callback_query(callback.id, text="Кнопка нажата!")
    bot.edit_message_text(
        "Вы нажали кнопку!",
        chat_id=callback.message.chat.id,
        message_id=callback.message.message_id
    )

bot.infinity_polling()

Типы данных Telegram

Все объекты Telegram API представлены Python-датаклассами. Они автоматически десериализуются из ответов сервера.

Основные типы

Класс Описание
Update Входящее обновление
Message Сообщение
User Пользователь или бот
Chat Чат
ChatFullInfo Полная информация о чате
MessageEntity Специальная сущность в тексте (ссылки, bold и т.д.)
PhotoSize Одно фото определённого размера
Audio Аудиофайл
Document Документ
Video Видеофайл
Animation GIF или видео без звука
Voice Голосовое сообщение
VideoNote Видеосообщение (кружок)
Sticker Стикер
Location Геопозиция
Contact Контакт
Poll Опрос
Dice Кубик/анимированный эмодзи

Кнопки и клавиатуры

Класс Описание
InlineKeyboardMarkup Inline-клавиатура
InlineKeyboardButton Кнопка inline-клавиатуры
ReplyKeyboardMarkup Обычная клавиатура
KeyboardButton Кнопка обычной клавиатуры
ReplyKeyboardRemove Убрать клавиатуру
ForceReply Принудительный ответ
CallbackQuery Нажатие inline-кнопки

Пример: создание inline-клавиатуры

from neogram import InlineKeyboardMarkup, InlineKeyboardButton

keyboard = InlineKeyboardMarkup(inline_keyboard=[[
    InlineKeyboardButton(text="✅ Да", callback_data="yes"),
    InlineKeyboardButton(text="❌ Нет", callback_data="no"),
], [
    InlineKeyboardButton(text="🌐 Сайт", url="https://example.com"),
]])

bot.send_message(chat_id, "Ваш выбор?", reply_markup=keyboard)

Пример: обычная клавиатура

from neogram import ReplyKeyboardMarkup, KeyboardButton

keyboard = ReplyKeyboardMarkup(keyboard=[
    [KeyboardButton(text="📞 Поделиться контактом", request_contact=True)],
    [KeyboardButton(text="📍 Моё местоположение", request_location=True)],
], resize_keyboard=True)

bot.send_message(chat_id, "Выберите действие:", reply_markup=keyboard)

Union-типы (дискриминантные объединения)

В некоторых методах API возвращаются объекты разных подтипов. neogram автоматически определяет правильный подтип по полю-дискриминатору:

# ChatMember может быть одним из:
# ChatMemberOwner, ChatMemberAdministrator, ChatMemberMember,
# ChatMemberRestricted, ChatMemberLeft, ChatMemberBanned

member = bot.get_chat_member(chat_id, user_id)
if isinstance(member, ChatMemberAdministrator):
    print("Это администратор")

InputFile — отправка файлов

Для отправки файлов используйте объект InputFile.

from neogram import InputFile

# Из пути к файлу
bot.send_document(chat_id, InputFile("document.pdf"))

# Из файлового объекта
with open("image.jpg", "rb") as f:
    bot.send_photo(chat_id, InputFile(f))

# Из bytes
with open("audio.ogg", "rb") as f:
    data = f.read()
bot.send_voice(chat_id, data)  # bytes тоже работают

# По file_id (файл уже загружен на серверы Telegram)
bot.send_photo(chat_id, "AgACAgIAAxkBAAI...")

# По URL
bot.send_photo(chat_id, "https://example.com/image.jpg")

Обработка ошибок

from neogram import TelegramAPIError

try:
    bot.send_message(-1, "Тест")
except TelegramAPIError as e:
    print(f"Код ошибки: {e.error_code}")
    print(f"Описание: {e.description}")
    print(f"Параметры: {e.parameters}")  # retry_after, migrate_to_chat_id и т.д.

Автоматические повторные попытки

Bot автоматически повторяет запросы при:

  • Сетевых ошибках транспортного уровня (с экспоненциальной задержкой до 30 сек)
  • Ошибках сервера Telegram (код 5xx)
  • Flood-ошибках (код 429) — если retry_on_flood=True, ждёт retry_after секунд

AI-инструменты (ii.py)

OnlySQ

Клиент для OnlySQ API — генерация текста и изображений.

from neogram import OnlySQ

ai = OnlySQ(key="ВАШ_КЛЮЧ_ONLYSQ")

Методы

get_models() — получить список доступных моделей с фильтрацией:

# Все текстовые модели, которые умеют стриминг
models = ai.get_models(modality="text", can_stream=True)

# Только названия бесплатных моделей
free_names = ai.get_models(max_cost=0.0, return_names=True)
Параметр Описание
modality Фильтр по типу: "text", "image" и т.д.
can_tools Фильтр: поддержка инструментов
can_think Фильтр: поддержка режима «думать»
can_stream Фильтр: поддержка стриминга
status Фильтр по статусу модели
max_cost Максимальная стоимость
return_names True — вернуть читаемые имена, False — ключи

generate_answer() — генерация текстового ответа:

response = ai.generate_answer(
    model="gpt-5.2-chat",
    messages=[
        {"role": "system", "content": "Ты помощник"},
        {"role": "user", "content": "Расскажи о Python"}
    ]
)
print(response)

generate_image() — генерация изображения:

success = ai.generate_image(
    model="flux",
    prompt="Кот в космосе, реалистично",
    ratio="16:9",
    filename="cat_space.png"
)
if success:
    bot.send_photo(chat_id, InputFile("cat_space.png"))

Deef

Набор полезных утилит: перевод, сокращение ссылок, фоновые задачи, AI-запросы.

from neogram import Deef

deef = Deef()

Методы

translate(text, lang) — перевод через Google Translate:

translated = deef.translate("Hello, world!", lang="ru")
print(translated)  # "Привет, мир!"

translated = deef.translate("Bonjour", lang="en")

short_url(long_url) — сокращение ссылки через clck.ru:

short = deef.short_url("https://very-long-url.example.com/path?param=value")
bot.send_message(chat_id, f"Ссылка: {short}")

run_in_bg(func, *args, **kwargs) — выполнить функцию в фоновом потоке:

def heavy_task(chat_id, data):
    # долгая операция...
    bot.send_message(chat_id, "Готово!")

# Запустить асинхронно и сразу вернуться
thread = deef.run_in_bg(heavy_task, message.chat.id, some_data)

encode_base64(path) — закодировать файл в Base64:

b64_string = deef.encode_base64("document.pdf")

perplexity_ask(model, query) — запрос к Perplexity AI с источниками:

result = deef.perplexity_ask(
    model="turbo",
    query="Последние новости Python 3.13"
)
print(result["text"])   # текст ответа
for url in result["urls"]:
    print(url)          # источники

# Доступные модели: "turbo", "auto", "o3pro", "research" и другие

toolchat(prompt, model) — генерация через Toolbaz:

answer = deef.toolchat(
    prompt="Объясни концепцию async/await в Python",
    model="gemini-2.5-flash"
)

Доступные модели: gemini-3-flash, gemini-2.5-pro, gemini-2.5-flash, deepseek-v3.1, deepseek-r1, gpt-5.2, gpt-5, claude-sonnet-4, grok-4-fast, toolbaz-v4.5-fast, toolbaz-v4, Llama-4-Maverick и другие.


ChatGPT

Универсальный клиент для OpenAI-совместимых API (OpenAI, OpenRouter, LocalAI и т.д.).

from neogram import ChatGPT

client = ChatGPT(
    url="https://api.openai.com/v1",
    headers={"Authorization": "Bearer sk-..."},
    impersonate="chrome"  # опционально
)

Методы

generate_chat_completion() — чат-запрос:

response = client.generate_chat_completion(
    model="gpt-4o",
    messages=[{"role": "user", "content": "Привет!"}],
    temperature=0.7,
    max_tokens=500
)
answer = response["choices"][0]["message"]["content"]

generate_image() — генерация изображения (DALL-E):

result = client.generate_image(
    prompt="Закат над горами, акварель",
    n=1,
    size="1024x1024",
    response_format="url"
)
image_url = result["data"][0]["url"]

generate_embedding() — создание embedding-вектора:

result = client.generate_embedding(
    model="text-embedding-3-small",
    input_data="Пример текста для эмбеддинга"
)
vector = result["data"][0]["embedding"]

generate_transcription() — транскрипция аудио (Whisper):

with open("audio.mp3", "rb") as f:
    result = client.generate_transcription(
        file=f,
        model="whisper-1",
        language="ru"
    )
print(result["text"])

get_models() — список доступных моделей:

models = client.get_models()
for m in models.get("data", []):
    print(m["id"])

Полный справочник методов Bot API

Ниже перечислены все доступные методы BotAsyncBot) с кратким описанием.

Webhook и поллинг

bot.get_updates(offset, limit, timeout, allowed_updates)
bot.set_webhook(url, certificate, ip_address, max_connections, ...)
bot.delete_webhook(drop_pending_updates)
bot.get_webhook_info()

Информация о боте

bot.get_me()                  # информация о боте
bot.log_out()                 # выход из облачного API
bot.close()                   # закрыть соединение

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

bot.send_message(chat_id, text, parse_mode, entities, ...)
bot.forward_message(chat_id, from_chat_id, message_id, ...)
bot.forward_messages(chat_id, from_chat_id, message_ids, ...)
bot.copy_message(chat_id, from_chat_id, message_id, ...)
bot.copy_messages(chat_id, from_chat_id, message_ids, ...)

Отправка медиафайлов

bot.send_photo(chat_id, photo, caption, ...)
bot.send_audio(chat_id, audio, caption, duration, performer, title, ...)
bot.send_document(chat_id, document, caption, ...)
bot.send_video(chat_id, video, duration, width, height, ...)
bot.send_animation(chat_id, animation, ...)
bot.send_voice(chat_id, voice, caption, ...)
bot.send_video_note(chat_id, video_note, ...)
bot.send_media_group(chat_id, media, ...)   # альбом
bot.send_sticker(chat_id, sticker, ...)
bot.send_paid_media(chat_id, star_count, media, ...)

Прочие типы сообщений

bot.send_location(chat_id, latitude, longitude, ...)
bot.send_venue(chat_id, latitude, longitude, title, address, ...)
bot.send_contact(chat_id, phone_number, first_name, ...)
bot.send_poll(chat_id, question, options, ...)
bot.send_dice(chat_id, emoji, ...)
bot.send_game(chat_id, game_short_name, ...)
bot.send_invoice(chat_id, title, description, payload, currency, prices, ...)
bot.send_checklist(business_connection_id, chat_id, checklist, ...)
bot.send_chat_action(chat_id, action)       # "typing", "upload_photo" и т.д.
bot.send_message_draft(chat_id, draft_id, text, ...)  # стриминг сообщения

Редактирование сообщений

bot.edit_message_text(text, chat_id, message_id, ...)
bot.edit_message_caption(chat_id, message_id, caption, ...)
bot.edit_message_media(media, chat_id, message_id, ...)
bot.edit_message_reply_markup(chat_id, message_id, reply_markup)
bot.edit_message_live_location(latitude, longitude, chat_id, message_id, ...)
bot.stop_message_live_location(chat_id, message_id, ...)
bot.edit_message_checklist(business_connection_id, chat_id, message_id, checklist)
bot.stop_poll(chat_id, message_id, ...)
bot.delete_message(chat_id, message_id)
bot.delete_messages(chat_id, message_ids)

Реакции

bot.set_message_reaction(chat_id, message_id, reaction, is_big)

Управление чатом

bot.get_chat(chat_id)
bot.get_chat_administrators(chat_id)
bot.get_chat_member_count(chat_id)
bot.get_chat_member(chat_id, user_id)
bot.leave_chat(chat_id)
bot.set_chat_title(chat_id, title)
bot.set_chat_description(chat_id, description)
bot.set_chat_photo(chat_id, photo)
bot.delete_chat_photo(chat_id)
bot.pin_chat_message(chat_id, message_id, ...)
bot.unpin_chat_message(chat_id, ...)
bot.unpin_all_chat_messages(chat_id)
bot.set_chat_permissions(chat_id, permissions, ...)
bot.set_chat_sticker_set(chat_id, sticker_set_name)
bot.delete_chat_sticker_set(chat_id)

Управление участниками

bot.ban_chat_member(chat_id, user_id, until_date, revoke_messages)
bot.unban_chat_member(chat_id, user_id, only_if_banned)
bot.restrict_chat_member(chat_id, user_id, permissions, ...)
bot.promote_chat_member(chat_id, user_id, ...)
bot.set_chat_administrator_custom_title(chat_id, user_id, custom_title)
bot.set_chat_member_tag(chat_id, user_id, tag)
bot.ban_chat_sender_chat(chat_id, sender_chat_id)
bot.unban_chat_sender_chat(chat_id, sender_chat_id)
bot.approve_chat_join_request(chat_id, user_id)
bot.decline_chat_join_request(chat_id, user_id)

Приглашения

bot.export_chat_invite_link(chat_id)
bot.create_chat_invite_link(chat_id, name, expire_date, member_limit, ...)
bot.edit_chat_invite_link(chat_id, invite_link, ...)
bot.revoke_chat_invite_link(chat_id, invite_link)
bot.create_chat_subscription_invite_link(chat_id, subscription_period, ...)
bot.edit_chat_subscription_invite_link(chat_id, invite_link, ...)

Форум-топики

bot.create_forum_topic(chat_id, name, icon_color, ...)
bot.edit_forum_topic(chat_id, message_thread_id, name, ...)
bot.close_forum_topic(chat_id, message_thread_id)
bot.reopen_forum_topic(chat_id, message_thread_id)
bot.delete_forum_topic(chat_id, message_thread_id)
bot.unpin_all_forum_topic_messages(chat_id, message_thread_id)
bot.get_forum_topic_icon_stickers()
# и другие методы для General-топика

Профиль пользователя

bot.get_user_profile_photos(user_id, offset, limit)
bot.get_user_profile_audios(user_id, offset, limit)
bot.set_user_emoji_status(user_id, emoji_status_custom_emoji_id, ...)

Файлы

bot.get_file(file_id)
# Скачать файл: https://api.telegram.org/file/bot{token}/{file_path}

Настройки бота

bot.set_my_commands(commands, scope, language_code)
bot.delete_my_commands(scope, language_code)
bot.get_my_commands(scope, language_code)
bot.set_my_name(name, language_code)
bot.get_my_name(language_code)
bot.set_my_description(description, language_code)
bot.get_my_description(language_code)
bot.set_my_short_description(short_description, language_code)
bot.get_my_short_description(language_code)
bot.set_my_profile_photo(photo)
bot.remove_my_profile_photo()
bot.set_chat_menu_button(chat_id, menu_button)
bot.get_chat_menu_button(chat_id)
bot.set_my_default_administrator_rights(rights, for_channels)
bot.get_my_default_administrator_rights(for_channels)

Inline-режим

bot.answer_inline_query(inline_query_id, results, cache_time, ...)
bot.answer_callback_query(callback_query_id, text, show_alert, url, ...)
bot.answer_web_app_query(web_app_query_id, result)
bot.save_prepared_inline_message(user_id, result, ...)
bot.save_prepared_keyboard_button(user_id, button)

Стикеры

bot.get_sticker_set(name)
bot.get_custom_emoji_stickers(custom_emoji_ids)
bot.upload_sticker_file(user_id, sticker, sticker_format)
bot.create_new_sticker_set(user_id, name, title, stickers, ...)
bot.add_sticker_to_set(user_id, name, sticker)
bot.set_sticker_position_in_set(sticker, position)
bot.delete_sticker_from_set(sticker)
bot.replace_sticker_in_set(user_id, name, old_sticker, sticker)
bot.set_sticker_set_title(name, title)
bot.set_sticker_set_thumbnail(name, user_id, format, thumbnail)
bot.delete_sticker_set(name)
# и другие методы для кастомных эмодзи и масок

Платежи и Stars

bot.send_invoice(chat_id, title, description, payload, currency, prices, ...)
bot.create_invoice_link(title, description, payload, currency, prices, ...)
bot.answer_shipping_query(shipping_query_id, ok, shipping_options, ...)
bot.answer_pre_checkout_query(pre_checkout_query_id, ok, error_message)
bot.get_my_star_balance()
bot.get_star_transactions(offset, limit)
bot.refund_star_payment(user_id, telegram_payment_charge_id)
bot.edit_user_star_subscription(user_id, telegram_payment_charge_id, is_canceled)

Подарки (Gifts)

bot.get_available_gifts()
bot.send_gift(gift_id, user_id, ...)
bot.gift_premium_subscription(user_id, month_count, star_count, ...)
bot.get_user_gifts(user_id, ...)
bot.get_chat_gifts(chat_id, ...)
bot.convert_gift_to_stars(business_connection_id, owned_gift_id)
bot.upgrade_gift(business_connection_id, owned_gift_id, ...)
bot.transfer_gift(business_connection_id, owned_gift_id, new_owner_chat_id, ...)

Бизнес-аккаунт

bot.get_business_connection(business_connection_id)
bot.read_business_message(business_connection_id, chat_id, message_id)
bot.delete_business_messages(business_connection_id, message_ids)
bot.set_business_account_name(business_connection_id, first_name, ...)
bot.set_business_account_bio(business_connection_id, bio)
bot.get_business_account_star_balance(business_connection_id)
bot.transfer_business_account_stars(business_connection_id, star_count)
bot.get_business_account_gifts(business_connection_id, ...)
# и другие методы управления бизнес-аккаунтом

Верификация

bot.verify_user(user_id, custom_description)
bot.verify_chat(chat_id, custom_description)
bot.remove_user_verification(user_id)
bot.remove_chat_verification(chat_id)

Буст чата

bot.get_user_chat_boosts(chat_id, user_id)

Истории (Stories)

bot.post_story(business_connection_id, content, active_period, ...)
bot.edit_story(business_connection_id, story_id, content, ...)
bot.delete_story(business_connection_id, story_id)
bot.repost_story(business_connection_id, from_chat_id, from_story_id, ...)

Passport

bot.set_passport_data_errors(user_id, errors)

Игры

bot.send_game(chat_id, game_short_name, ...)
bot.set_game_score(user_id, score, chat_id, message_id, ...)
bot.get_game_high_scores(user_id, chat_id, message_id, ...)

Практические примеры

Бот с inline-кнопками и callback

from neogram import Bot, InlineKeyboardMarkup, InlineKeyboardButton

bot = Bot(token="TOKEN", parse_mode="HTML")

def make_menu():
    return InlineKeyboardMarkup(inline_keyboard=[[
        InlineKeyboardButton(text="📋 О боте", callback_data="about"),
        InlineKeyboardButton(text="❓ Помощь", callback_data="help"),
    ]])

@bot.message_handler(commands=["start"])
def start(message):
    bot.send_message(
        message.chat.id,
        "Выберите раздел:",
        reply_markup=make_menu()
    )

@bot.callback_query_handler(func=lambda cb: True)
def handle_callback(callback):
    if callback.data == "about":
        text = "Я бот на <b>neogram</b>!"
    else:
        text = "Справка: /start — начало"
    bot.edit_message_text(
        text,
        chat_id=callback.message.chat.id,
        message_id=callback.message.message_id,
        reply_markup=make_menu()
    )
    bot.answer_callback_query(callback.id)

bot.infinity_polling()

AI-бот с OnlySQ

from neogram import Bot, OnlySQ

bot = Bot(token="TOKEN")
ai = OnlySQ(key="ONLYSQ_KEY")

@bot.message_handler(content_types=["text"])
def ai_reply(message):
    bot.send_chat_action(message.chat.id, "typing")
    answer = ai.generate_answer(
        model="gpt-5.2-chat",
        messages=[{"role": "user", "content": message.text}]
    )
    bot.send_message(message.chat.id, answer)

bot.infinity_polling()

Асинхронный бот с переводом

import asyncio
from neogram import AsyncBot, Deef

bot = AsyncBot(token="TOKEN")
deef = Deef()

@bot.message_handler(commands=["translate"])
async def translate_cmd(message):
    parts = message.text.split(maxsplit=1)
    if len(parts) < 2:
        await bot.send_message(message.chat.id, "Использование: /translate текст")
        return
    translated = deef.translate(parts[1], lang="en")
    await bot.send_message(message.chat.id, f"🇬🇧 {translated}")

asyncio.run(bot.infinity_polling())

Конфигурация логгера

neogram использует стандартный Python logging с именем "neogram":

import logging

logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(name)s: %(message)s"
)

# Отключить логи neogram
logging.getLogger("neogram").setLevel(logging.WARNING)

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

neogram-9.7.1.tar.gz (135.2 kB view details)

Uploaded Source

Built Distribution

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

neogram-9.7.1-py3-none-any.whl (127.8 kB view details)

Uploaded Python 3

File details

Details for the file neogram-9.7.1.tar.gz.

File metadata

  • Download URL: neogram-9.7.1.tar.gz
  • Upload date:
  • Size: 135.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for neogram-9.7.1.tar.gz
Algorithm Hash digest
SHA256 60094c277584458803eb9b9c113f381202d336ea67515daeafa557c47d086db8
MD5 07a8a2055ee33b33aa5779648e8221fc
BLAKE2b-256 75007455a76a99b4da1c2355e18de98831a512d9a7d8076cd2d71dc64004ee53

See more details on using hashes here.

File details

Details for the file neogram-9.7.1-py3-none-any.whl.

File metadata

  • Download URL: neogram-9.7.1-py3-none-any.whl
  • Upload date:
  • Size: 127.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.11

File hashes

Hashes for neogram-9.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c27ee683792ec56c88b95ed371e59ba25a6e0f44129e12ebb79b7a3a259ddb66
MD5 1829559c7aaa56c2f7494786433ce38a
BLAKE2b-256 88f8082b708ee9d3001909def3ce65037f49a74960a14114ca37c06c744cd21c

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