Часть 1: Регистрация бота
Проще всего зарегистрировать бота через @BotFather, отправив ему команду /start или /newbot и заполнив поля с названием и коротким именем бота. Затем получите токен бота и сохраните его надежно, так как он необходим для авторизации и взаимодействия с ботом.
Часть 2: Подготовка к написанию кода
Как уже упоминалось в заголовке, мы будем создавать бота на Python. В этой статье мы рассмотрим использование библиотеки PyTelegramBotAPI (Telebot). Если вы еще не установили Python, то необходимо сделать это. В терминале Linux для установки Python нужно ввести…
sudo apt-get install python python-pip
Если вы используете операционную систему Windows, вам нужно скачать Python с официального сайта.
Затем, в случае использования Linux, откройте терминал, а для Windows — командную строку, и введите…
pip install pytelegrambotapi
Часть 3: Получаем сообщения и говорим «Привет»
Откройте свой предпочитаемый текстовый редактор и начните писать код для создания бота! Вначале необходимо импортировать нашу библиотеку и подключить токен бота:
import telebot; bot = telebot.TeleBot('%ваш токен%');
Теперь создадим функцию для получения текстовых сообщений:
@bot.message_handler(content_types=['text']) def get_text_messages(message):
В данном фрагменте кода мы определили слушателя для текстовых сообщений и функцию для их обработки. В параметре content_types можно указать несколько значений, а не только одно, например:
@bot.message_handler(content_types=['text', 'document', 'audio'])
Код будет реагировать на текстовые сообщения, документы и аудио. Дополнительную информацию можно найти в официальной документации.
Теперь добавим некоторый функционал в наш метод: если пользователь отправит сообщение «Привет», то мы отправим ему ответ «Привет, чем я могу вам помочь?», а если пользователь отправит команду «/help», то мы попросим его отправить сообщение «Привет»:
if message.text == "Привет": bot.send_message(message.from_user.id, "Привет, чем я могу тебе помочь?") elif message.text == "/help": bot.send_message(message.from_user.id, "Напиши привет") else: bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")
По-моему, этот фрагмент кода не нуждается в комментариях. Теперь вам нужно добавить всего одну строку кода (вне всех методов) в наш скрипт
bot.polling(none_stop=True, interval=0)
Теперь наш бот будет постоянно проверять у сервера Telegram, есть ли новые сообщения для нашего бота. Если мы отправим сообщение нашему боту, Telegram передаст его боту. Сохраните файл, и запустите его в консоли.
python bot.py
Где bot.py – имя нашего файла.
Теперь вы можете отправить сообщение боту и посмотреть на результат.
Часть 4: Кнопки и ветки сообщений
Отправка сообщений, конечно, весело, но веселее общаться с пользователем, задавая ему вопросы и получая на них ответы. Давайте предположим, что теперь наш бот будет последовательно спрашивать у пользователя его имя, фамилию и возраст. Для этого мы будем использовать метод register_next_step_handler бота:
name = ''; surname = ''; age = 0; @bot.message_handler(content_types=['text']) def start(message): if message.text == '/reg': bot.send_message(message.from_user.id, "Как тебя зовут?"); bot.register_next_step_handler(message, get_name); #следующий шаг – функция get_name else: bot.send_message(message.from_user.id, 'Напиши /reg'); def get_name(message): #получаем фамилию global name; name = message.text; bot.send_message(message.from_user.id, 'Какая у тебя фамилия?'); bot.register_next_step_handler(message, get_surnme); def get_surname(message): global surname; surname = message.text; bot.send_message('Сколько тебе лет?'); bot.register_next_step_handler(message, get_age); def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); bot.send_message(message.from_user.id, 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?')
Таким образом, мы сохранили данные пользователя. В этом примере показана очень упрощенная версия сохранения данных, на самом деле данные и состояния пользователя должны храниться в базе данных. Однако, сегодня мы работаем с ботом, а не с базами данных. Последнее дополнение — запросим у пользователя подтверждение того, что все данные введены правильно. Для этого немного изменяем код метода get_age, добавив кнопки:
def get_age(message): global age; while age == 0: #проверяем что возраст изменился try: age = int(message.text) #проверяем, что возраст введен корректно except Exception: bot.send_message(message.from_user.id, 'Цифрами, пожалуйста'); keyboard = types.InlineKeyboardMarkup(); #наша клавиатура key_yes = types.InlineKeyboardButton(text='Да', callback_data='yes'); #кнопка «Да» keyboard.add(key_yes); #добавляем кнопку в клавиатуру key_no= types.InlineKeyboardButton(text='Нет', callback_data='no'); keyboard.add(key_no); question = 'Тебе '+str(age)+' лет, тебя зовут '+name+' '+surname+'?'; bot.send_message(message.from_user.id, text=question, reply_markup=keyboard)
Теперь наш бот отправляет клавиатуру, но если пользователь на нее нажмет, то ничего не произойдет. Это происходит потому, что мы не написали метод-обработчик. Давайте создадим его:
@bot.callback_query_handler(func=lambda call: True) def callback_worker(call): if call.data == "yes": #call.data это callback_data, которую мы указали при объявлении кнопки .... #код сохранения данных, или их обработки bot.send_message(call.message.chat.id, 'Запомню : )'); elif call.data == "no": ... #переспрашиваем
Теперь нам нужно добавить одну строку в начало файла:
from telebot import types
Теперь сохраняем и запускаем нашего бота.
Еще один альтернативный вариант создания бота Telegram на Python (Видео инструкция)