Pull to refresh

Разбираемся с Tg ботом вместе. Python

Решил разобраться с написанием телеграмм бота и поделиться успехами с Вами.

Как уже было сказано ранее основная цель освоить телеграмм бота и создать некоторые шаблоны которые могут пригодиться в будущем для создания полноценного бота.

Всё начинается с малого

Ⅰ. Регистрация бота

  1. Поиск в tg @BotFather

  2. Регистрация

  3. Запомнить токен(Ваш доступ к боту)

Ⅱ. Подготовка

Пишем на Python'е с использованием библиотеки PyTelegramBotAPI. Я использую PyCharm, его можно скачать на официальном сайте https://www.jetbrains.com/ru-ru/pycharm/. Так же для установки библиотеки PyTelegramBotAPI вводим следующую команду в командной строке

pip install pytelegrambotapi

Ⅲ. Базовые элементы. Привет

Импортируем библиотеку и подключаем нашего бота

import telebot
bot = telebot.TeleBot('%токен%')

Описываем метод получения текстовых сообщений:

@bot.message_handler(content_types=['text', 'document', 'audio']) #получает
def get_text_messages(message): #обрабатывает

Опишем функцию обработки полученного сообщения. При получении слова "Паника" бот будет отвечать "заразна !". Для помощи пользователю будем выводить ещё текст о том что надо делать.

if message.text == "Паника":
    bot.send_message(message.from_user.id, "Заразна!")
else:
    bot.send_message(message.from_user.id, "Напиши Паника")

Обратим внимание на переменную message.from_user.id она хранит уникальный для каждого пользователя id, именно с помощью него мы сможем отвечать нужному человеку и его я планирую в будущем хранить в базе данных пользователей

Наш бот будет у сервера Telegram постоянно спрашивать "Мне кто-нибудь написал?" Если это случится, наш бот получит переданное сообщение. Для этого допишем:

bot.polling(none_stop=True, interval=0)

Работает !

Ⅳ. Диалог

Давайте научим нашего бота вести диалог с пользователем. В будущем я планирую это использовать как шаблон для регистрации. Бот будет задавать человеку ряд вопросов, получать на них ответы и сохранять

Заведем ряд переменных в которых будем хранить данные регистрации:

name = ''
surname = ''
city = ''
age = 0

Аналогично как в предыдущем пункте опишем функцию начала регистрации start по команде /reg

@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_surname) #следующий шаг – функция get_surname

    def get_surname(message): #получаем фамилию
        global city
        name = message.text
        bot.send_message(message.from_user.id, 'Из какого ты города?')
        bot.register_next_step_handler(message, get_city)

    def get_city(message): #получаем город
        global city
        city = message.text
        bot.send_message(message.from_user.id,'Сколько тебе лет?')
        bot.register_next_step_handler(message, get_age)

    def get_age(message): #получаем возраст
        global age
        try:
            age = int(message.text) #проверяем, что возраст введен корректно
        except Exception:
            bot.send_message(message.from_user.id, 'Цифрами, пожалуйста')
            bot.register_next_step_handler(message, get_age)

В каждой из этих функций мы с помощью переменной message получаем интересующие нас данные, сохраняя их и с помощью bot.register_next_step_handler переходим к следующей функции. В функции get_age проверяем чтобы полученное значение действительно было числом.

В следующей части рассмотрим работу с кнопками и сохранение данных в базе данных.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.