Telegram Bot Не могу создать последовательное заполнение списка
Создаю бота через библиотеку telebot и не могу разобраться как зациклить вопросы бота чтобы он ждал ответ и затем продолжал спрашивать пока не закончится список
Пример: Есть список ["a","b","c","d","e"] и для каждого элемента списка бот должен получить значение 0 или 1 и добавлять его во второй список по итогу сопоставляемый с первым
бот:-a? пользователь:-1 бот:-b? пользователь:-0 бот:-c? пользователь:-1 бот:-d? пользователь:-1 бот:-e? пользователь:-0 бот:-a1, b0, c1, d1, e0
мой код:
lines =["a","b","c","d","e"]
stat =[]
@bot.message_handler(content_types=["text"])
def text_handler(message):
global i
for i in range(len(lines)):
if message.text =="A":
bot.send_message(message.chat.id, lines[i])
bot.register_next_step_handler(message, s_h)
def s_h(message):
if message.text =="0":
stat.append(0)
bot.send_message(message.chat.id, lines[i]+stat[i])
elif message.text == "1":
stat.append(1)
bot.send_message(message.chat.id, lines[i]+stat[i])
bot.polling(none_stop=True)
он то выдает ошибку то делает вообще не то и я не понимаю как это исправить
Ответы (1 шт):
lines = ['a', 'b', 'c', 'd', 'e']
d = {}
@bot.message_handler(commands=['start'])
def one(message, index=None):
if index is None:
msg = bot.send_message(message.chat.id, lines[0])
bot.register_next_step_handler(msg, two, msg.text)
else:
if index > len(lines) - 1:
bot.send_message(message.chat.id, 'список закончен')
else:
msg = bot.send_message(message.chat.id, lines[index])
bot.register_next_step_handler(msg, two, msg.text)
def two(message, text):
if '0' or '1' in message.text:
d[text] = message.text
one(message, lines.index(text) + 1)
print(d)
if __name__ == '__main__':
bot.infinity_polling()
Функция one принимает два аргумента - message и index
При первом запуске index = None поэтому отправляем элемент из списка с нулевым индексом.
Регистрируем обработчик следующего шага, который вызывает функцию two с текстом сообщения. Обратите внимание, что мы в register_next_step_handler три аргумента: отправляемое сообщение, функция следующего шага и текст из отправленного ботом сообщения.
Если index указан, то проверяется, не закончился ли список lines.
Если не закончился, отправляется следующее сообщение из списка по индексу элемента, и также регистрируется обработчик для функции two.
Функция two принимает два аргумента - message и text (текст из отправленного ботом сообщения).
Проверяем, содержит ли текст сообщения пользователя '0' или '1'. Если условие выполняется, то значение message.text сохраняется в словарь d под ключом text (текст из отправленного ботом сообщения).
Затем вызывается функция one с увеличенным индексом, чтобы продолжить отправку следующего сообщения из списка lines.
вывод в консоль:
{'a': '1'}
{'a': '1', 'b': '1'}
{'a': '1', 'b': '1', 'c': '1'}
{'a': '1', 'b': '1', 'c': '1', 'd': '1'}
{'a': '1', 'b': '1', 'c': '1', 'd': '1', 'e': '1'}
p.s. global зло.
