@Proger_Matthew
Только начал учить программирование. Учу Пайтон.

Как научить бота анализировать входные данные в TeleBotAPI?

Учусь создавать ТГботов в библиотеке telebot. Подскажите, как сделать так:

ЮЗЕР: Вычисли сумму чисел
БОТ: Введи числа(очень важно, чтобы бот отправил это сообщение и только после этого считал данные последующего сообщения)
ЮЗЕР: 5 и 6
БОТ: 11

Тут есть несколько непонятных мне моментов:
1. Есть ли в telebot методы считывания данных(по типу input())
2. Если нет, то как осуществить вот это все?
3. Нужно ли еще использовать какие-то библиотеки?

Спасибо за помощь!
  • Вопрос задан
  • 1440 просмотров
Решения вопроса 1
MinTnt
@MinTnt
import telebot
from telebot import types
import re #Эта библиотека, чтоб с текстом работать. Искать его и тд. Я её юзаю по принципу 'Разделяй и властвуй'

bot = telebot.TeleBot("bot-token") #токен от BotFather'a

@bot.message_handler(content_types=['text']) #Срабатывание на text
def start(message): #Начало
	if message.text.lower() == 'вычисли сумму чисел' or message.text.lower() == '/sum':#Команда для начала. message.text - получаемый текст. lower(), значит не учитывается регистр, т.е. и /SUM и /SuM будет считаться за один и тот же текст
		bot.send_message(message.from_user.id, 'Хорошо. Введи два числа которые ты хочешь суммировать. К примеру "1 и 5".')
		bot.register_next_step_handler(message, sumcalc)#"Перенаправляет" на след.функцию
	else:
		bot.send_message(message.from_user.id, 'Введи /sum, или напиши "Вычисли сумму чисел", чтобы продолжить.')

def sumcalc(message):#После "перенаправления" функция сработает, лишь после получения message
	try: #try юзаю, чтоб делать проверки каких-то действий. И в случае ошибки, программа не крашнется, а просто выполнит заданные в except действие.
		number1, number2 = re.split(' и ', message.text, maxsplit = 1)#Разделяет полученный текст по слову " и "
		try:
			number1 = int(number1) #Проверка "числа ли?" полученные данные. Если без такой проверки. То при попытке сделать сумму, а там не числа - то краш
			try:
				number2 = int(number2)
				bot.send_message(message.from_user.id, 'Сумма двоих введённых тобой чисел равна - ' + str(number1 + number2))
			except Exception:
				bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\nВы ввели не число. /sum - Чтоб повторить сначала.')
		except Exception:
			bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\nВы ввели не число. /sum - Чтоб повторить сначала.')
	except Exception:
		bot.send_message(message.from_user.id, 'Вы ввели данные не в правильном формате.\n*Будьте внимательны*, ввод должен быть формата *"*число *и* число*"*. /sum - Чтоб повторить сначала.', parse_mode= 'Markdown')

bot.polling( none_stop = True, interval=0 )#Чтоб программа не закрывалась никогда
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы