Зацикливается отправка сообщений python, pytelegrambotapi
Делаю бота с множеством функций и одна из них - отправка рандомного числа
@bot.message_handler( commands=[ 'rnd' ])
def read_o1(message):
bot.reply_to(message, 'Введи откуда мне стоит начать')
@bot.message_handler()
def read_o2(message):
bot.reply_to(message, 'Введи, где мне стоит закончить')
o1 = int(message.text)
@bot.message_handler()
def kch(message):
bot.reply_to(message, 'А сколько чисел нужно?')
o2 = int(message.text)
@bot.message_handler(func=lambda message: True)
def send_r(message):
kch = int(message.text)
try:
while i != kch:
bot.reply_to(message, random.randint(o1, o2))
i += 1
except:
bot.reply_to(message, 'Прости, но произошла ошибка!')
Но при тесте бота он начинает бесконечно отправлять одни и то же сообщение
Ответы (1 шт):
Автор решения: Krutoy 4el
→ Ссылка
Вложенный message_handler() нормально работать не будет, нужно всё обрабатывать в одной функции, а прогресс получения информации от пользователя хранить. Например как-то так:
rnd_sessions = {}
@bot.message_handler( commands=[ 'rnd' ])
def rnd_start(message):
rnd_sessions[message.from_user] = []
bot.reply_to(message, 'Введи откуда мне стоит начать')
@bot.message_handler(func = lambda message: message.from_user in rnd_sessions)
def rnd_read_next(message):
current = rnd_sessions[message.from_user] # копируем ссылку на список
current.append(message.text) # добавляем число
num = len(current) # узнаем, сколько у нас уже есть чисел
if num == 1: # есть одно, просим другое
bot.reply_to(message, 'Введи, где мне стоит закончить')
elif num == 2: # уже есть два, запрашиваем третее
bot.reply_to(message, 'А сколько чисел нужно?')
elif num == 3: # у нас есть все нужные числа
try:
for i in range(int(current[2])):
bot.reply_to(message, random.randint(int(current[0]), int(current[1])))
except:
bot.reply_to(message, 'Прости, но произошла ошибка!')
del rnd_sessions[message.from_user] # сессия завершена
На практике, к сожалению, не проверял.
