Не могу понять почему не работает цикл for в библиотеке Telebot
Всем привет! Впервые работаю с библиотекой Telebot. Хочу создать бота, который помогает учить английские слова. Не могу понять почему не работает цикл for в функции main
import telebot
bot = telebot.TeleBot('my token')
listOfEnWords = []
listOfRusWords = []
all_words = []
amount = 0
@bot.message_handler(commands=['start'])
def main(message):
bot.send_message(message.chat.id, f'<b>Привет, {message.from_user.first_name}!</b>\n<em>Этот бот поможет лучше выучить какие-либо иностранные слова.</em>\nДля начала введите кол-во ваших слов: ', parse_mode='html')
for i in range(amount):
bot.register_next_step_handler(message, all_continue)
def all_continue(message):
global amount
amount = int(message.text)
bot.reply_to(message, 'Начнём learning!')
bot.send_message(message.chat.id, 'Введите слово на английском')
bot.register_next_step_handler(message, en_word)
def en_word(message):
enWord = message.text
listOfEnWords.append(enWord)
bot.send_message(message.chat.id, 'Введите его перевод на русском: ')
bot.register_next_step_handler(message, ru_word)
def ru_word(message):
rusWord = message.text
listOfRusWords.append(rusWord)
bot.polling(none_stop=True)
Надеюсь на помощь
Ответы (1 шт):
Давайте пошагово. Мы запускаем скрипт и изначально переменная amount хранит 0. Пользователь пишет /start и запускается функция main. В ней вы отправляете сообщение и далее начинается цикл с amount равным нулю. Т.е. нам нужно перед циклом вызвать функцию которая меняет amount. В целом ваша реализация не подходит, я сделал немного иначе, не уверен, что это хорошая реализация, но она работает:
import telebot
bot = telebot.TeleBot('6222261755:AAGvOP8e2WWZW0lOVuL_moMNord-UHXIG_U')
listOfEnWords = []
listOfRusWords = []
all_words = []
amount = 0
@bot.message_handler(commands=['start'])
def main(message):
bot.send_message(message.chat.id,
f'<b>Привет, {message.from_user.first_name}!</b>\n<em>Этот бот поможет лучше выучить какие-либо иностранные слова.</em>\nДля начала введите кол-во ваших слов: ',
parse_mode='html')
bot.register_next_step_handler(message, all_continue)
def all_continue(message):
global amount
amount = int(message.text)
bot.reply_to(message, 'Начнём learning!')
bot.send_message(message.chat.id, 'Введите слово на английском')
bot.register_next_step_handler(message, en_word)
def en_word(message):
enWord = message.text
listOfEnWords.append(enWord)
bot.send_message(message.chat.id, 'Введите его перевод на русском: ')
bot.register_next_step_handler(message, ru_word)
def ru_word(message):
rusWord = message.text
listOfRusWords.append(rusWord)
global amount
amount -= 1
if amount == 0:
# цикл 'for' закончился
return
bot.send_message(message.chat.id, "Введите слово на английском")
bot.register_next_step_handler(message, en_word)
bot.polling(none_stop=True)
также стоит отметить, люди в комментариях правильно отметили, если вдруг во время выполнения нашего подобия цикла, другой пользователь ведёт команду /start и число вслед за этим, то amount заменится на уже новое значение. Я вам советую использовать словарь, где ключ будет id пользователя, а значением его личный amount.