Перейти к основному содержимому

pyTelegramBot — боты в Telegram

Разработчику

pyTelegramBotAPI устанавливается как pip install pytelegrambotapi, в коде чаще пишут import telebot. Библиотека обращается к Telegram Bot API: бот — это программа на вашем сервере или компьютере, которая получает обновления (сообщения, нажатия кнопок) и отправляет ответы.

Путеводитель: Инструменты и среды. HTTP в Python: requests.


Подготовка

  1. В Telegram откройте @BotFather.
  2. Команда /newbot → имя и username (должен оканчиваться на bot).
  3. Сохраните токен — это пароль бота. Не публикуйте его в репозитории.
pip install pytelegrambotapi

Токен лучше хранить в переменной окружения:

# Windows PowerShell
$env:BOT_TOKEN="123456:ABC..."

# Linux / macOS
export BOT_TOKEN="123456:ABC..."

Минимальный бот

import os
import telebot

bot = telebot.TeleBot(os.environ["BOT_TOKEN"])

@bot.message_handler(commands=["start", "help"])
def send_welcome(message):
bot.reply_to(
message,
"Привет! Я учебный бот.\n"
"Команды: /start, /help, /echo <текст>",
)

@bot.message_handler(commands=["echo"])
def echo(message):
# /echo привет → «привет»
parts = message.text.split(maxsplit=1)
if len(parts) < 2:
bot.reply_to(message, "Напишите: /echo ваш текст")
return
bot.reply_to(message, parts[1])

@bot.message_handler(func=lambda m: True)
def fallback(message):
bot.reply_to(message, "Не понял. Попробуйте /help")

if __name__ == "__main__":
bot.infinity_polling()

Запуск: python bot.py. Напишите боту в Telegram после /start.


Команды и обработчики

ДекораторСрабатывает когда
@bot.message_handler(commands=["ping"])Сообщение /ping
@bot.message_handler(content_types=["photo"])Фото
@bot.message_handler(func=lambda m: m.text and m.text.startswith("#"))Свой фильтр

Объект message содержит chat.id, from_user, text, document и др. — см. типы Bot API.


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

from telebot import types

@bot.message_handler(commands=["menu"])
def menu(message):
kb = types.ReplyKeyboardMarkup(resize_keyboard=True)
kb.add("Расписание", "Справка")
bot.send_message(message.chat.id, "Выберите пункт:", reply_markup=kb)

@bot.message_handler(func=lambda m: m.text == "Справка")
def help_btn(message):
bot.send_message(message.chat.id, "Список команд: /start, /menu")

Inline-кнопки (под сообщением, не в поле ввода):

markup = types.InlineKeyboardMarkup()
markup.add(types.InlineKeyboardButton("Сайт", url="https://example.com"))
bot.send_message(message.chat.id, "Ссылки:", reply_markup=markup)

Long polling и webhook

Учебные боты обычно используют infinity_polling() — библиотека сама опрашивает серверы Telegram.

На продакшене часто ставят webhook (HTTPS-URL, куда Telegram шлёт POST). Для школы и домашних проектов polling достаточно.


Безопасность и ограничения

  • Токен = полный доступ к боту; при утечке — /revoke в BotFather и новый токен.
  • Бот не видит все сообщения в группе, пока не включён режим Privacy или бот не добавлен как админ (зависит от настроек).
  • Соблюдайте правила Telegram и не рассылайте спам.

Альтернативы: python-telegram-bot, aiogram (асинхронный стиль). telebot выбирают за простой синхронный API для первых проектов.


См. также


См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).