Найти тему
Stepan.Burmistrov

Создание Телеграм-бота с 0

В этой статье мы шаг за шагом рассмотрим процесс создания собственного бота для Telegram.

Шаг 1: Регистрация бота в Telegram

  1. Откройте Telegram и найдите @BotFather.
  2. Напишите команду /newbot и следуйте инструкциям.
  3. Запишите токен вашего нового бота — он понадобится для подключения бота к коду.

Шаг 2: Установка библиотеки pyTelegramBotAPI

  1. Убедитесь, что у вас установлен Python и pip. (если нет, идем в раздет курса по основам Python и читаем там: https://stepik.org/lesson/615316/step/1?unit=610748
  2. Откройте терминал и выполните команду:
    pip install pyTelegramBotAPI
  3. После успешной установки переходим к написанию кода.

Шаг 3: Основы pyTelegramBotAPI

  • Декораторы в pyTelegramBotAPI используются для упрощения привязки функций к определенным типам сообщений или действиям. Пример декоратора: @bot.message_handler(commands=['start'])

Шаг 4: Создание эхо-бота

  • Эхо-бот просто отвечает пользователю тем же сообщением, которое он получил.
import telebot
bot = telebot.TeleBot("YOUR_TOKEN_HERE")

@bot.message_handler(func=lambda message: True)
def echo_all(message):
bot.reply_to(message, message.text)

bot.polling()

На этом этапе у вас уже есть рабочий телеграм-бот! Поздравляю!

Шаг 5: Обработка команды /start

  • Команда /start обычно используется для инициализации бота пользователем. Вы также можете создавать другие команды, и разместить их в меню, которое редактируется через @BotFather
-2

Шаг 6: Создание меню

  • Меню можно реализовать с помощью ReplyKeyboardMarkup для стандартной клавиатуры или InlineKeyboardMarkup для кнопок, прикрепленных к сообщению

Шаг 7: InlineKeyboard

  • Используется для создания кнопок в сообщениях.
inline_kb = telebot.types.InlineKeyboardMarkup()
button = telebot.types.InlineKeyboardButton(text='Нажми меня', callback_data='test')
inline_kb.add(button)

Шаг 8: ReplyKeyboard

  • Предоставляет пользователю набор стандартных кнопок.

reply_kb = telebot.types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
button = telebot.types.KeyboardButton('Привет!')
reply_kb.add(button)

Шаг 9: Отправка картинки

  • Для отправки картинки используйте метод
photo = open('path_to_image.jpg', 'rb')
bot.send_photo(
message.chat.id, photo)

Шаг 10: Отправка стикера

  • Стикеры отправляются с помощью метода send_sticker
sticker = open('path_to_sticker.webp', 'rb')
bot.send_sticker(
message.chat.id, sticker)

Шаг 11: Собираем все вместе

import telebot
from telebot import types

# Ваш уникальный токен, полученный от BotFather при создании бота в Telegram
TOKEN = 'YOUR_TELEGRAM_BOT_TOKEN' # Замените на ваш токен

bot = telebot.TeleBot(TOKEN) # Создаем экземпляр бота

# Обработчик для команды '/start', который будет вызываться, когда пользователь отправит эту команду
@bot.message_handler(commands=['start'])
def start_message(message):
# Отправляем приветственное сообщение пользователю
bot.send_message(message.chat.id, "Привет! Я твой телеграм-бот.")

# Создаем inline-клавиатуру с кнопками
inline_kb = types.InlineKeyboardMarkup()
# Каждая кнопка имеет отображаемый текст и данные для обратного вызова (callback_data)
button_sticker = types.InlineKeyboardButton('Отправить стикер', callback_data='sticker')
button_picture = types.InlineKeyboardButton('Отправить картинку', callback_data='picture')
button_reply_kb = types.InlineKeyboardButton('Ответить со стандартной клавиатурой', callback_data='reply_kb')
inline_kb.add(button_sticker, button_picture, button_reply_kb) # Добавляем кнопки в клавиатуру

# Отправляем сообщение с прикрепленной inline-клавиатурой
bot.send_message(message.chat.id, "Выбери, что хочешь сделать:", reply_markup=inline_kb)

# Обработчик для текстовых сообщений
@bot.message_handler(content_types=["text"])
def text_message(message):
# Просто отвечаем тем же текстом, который прислал пользователь
bot.send_message(message.chat.id, message.text)

# Обработчик для callback-ов от inline-клавиатур
@bot.callback_query_handler(func=lambda call: True)
def callback_query(call):
# Отвечаем на callback, это необходимо для корректной работы inline-кнопок
bot.answer_callback_query(call.id)
# Удаляем inline-клавиатуру из сообщения, чтобы пользователь больше не мог на нее нажать
bot.edit_message_reply_markup(call.message.chat.id, call.message.message_id, reply_markup=None)

# Обработка нажатий на inline-кнопки
if call.data == 'sticker':
# Отправляем стикер
bot.send_sticker(call.message.chat.id, 'CAACAgQAAxkBAAEB6ZFlTzloCfzNo5SofQwWL9P6KmaldgACJQEAAqghIQbYv0ET_Pm8ejME')
elif call.data == 'picture':
file_path = 'image.jpg'
# Пытаемся отправить фото
try:
with open(file_path, 'rb') as photo:
bot.send_photo(call.message.chat.id, photo)
except Exception as e:
# В случае ошибки, выводим сообщение об ошибке
print(f"Ошибка при отправке фото: {e}")
elif call.data == 'reply_kb':
# Создаем стандартную клавиатуру с одной кнопкой
markup = types.ReplyKeyboardMarkup(resize_keyboard=True, one_time_keyboard=True)
markup.add(types.KeyboardButton('Пример кнопки'))
# Отправляем сообщение с клавиатурой
bot.send_message(call.message.chat.id, "Выбери кнопку на клавиатуре:", reply_markup=markup)

# Запускаем бота в режиме опроса
bot.polling(none_stop=True)

Теперь у вас есть рабочий пример Telegram-бота, который реагирует на команду /start, отображает inline-клавиатуру с различными опциями и обрабатывает последующие действия пользователя. Этот бот — отличная отправная точка для более сложных и интерактивных проектов.

Следующие шаги для развития вашего проекта могут включать добавление обработки других команд, создание интерактивных игр, интеграцию с внешними API для получения данных в реальном времени или даже разработку системы для автоматизированного ответа на часто задаваемые вопросы.

Помните, что ключ к успешному проекту — это постепенное добавление функционала и тестирование на каждом этапе. Начните с базовых функций и постепенно внедряйте новые возможности, такие как пользовательские меню, сложные многоступенчатые диалоги и интеграция с другими сервисами. Также не забывайте о безопасности: храните токены и ключи API в безопасном месте и используйте средства шифрования, если ваш бот будет обрабатывать конфиденциальную информацию.

В процессе разработки бота вы научитесь многим навыкам программирования и получите опыт, который можно применить в самых разных проектах. Удачи в создании вашего уникального Telegram-бота!