В этой статье мы шаг за шагом рассмотрим процесс создания собственного бота для Telegram.
Шаг 1: Регистрация бота в Telegram
- Откройте Telegram и найдите @BotFather.
- Напишите команду /newbot и следуйте инструкциям.
- Запишите токен вашего нового бота — он понадобится для подключения бота к коду.
Шаг 2: Установка библиотеки pyTelegramBotAPI
- Убедитесь, что у вас установлен Python и pip. (если нет, идем в раздет курса по основам Python и читаем там: https://stepik.org/lesson/615316/step/1?unit=610748
- Откройте терминал и выполните команду:
pip install pyTelegramBotAPI - После успешной установки переходим к написанию кода.
Шаг 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
Шаг 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-бота!