Подскажите как сделать что бы бот отправлял следующую строчку из файла
Написал простого бота что бы по нажатию кнопки пользователь получал сообщение которое бот берет из txt файла. В этом файле 30 строк и я хочу что бы они выдавались по очереди не повторяясь.
import random
from telebot import types
bot = telebot.TeleBot('токен')
f = open('C:\\Users\\budgetpls\\Desktop\\podarok\\data\\facts.txt', 'r', encoding='UTF-8')
facts = f.read().split('\n')
f.close()
@bot.message_handler(commands=["start"])
def start(m, res=False):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Хочу подарочек")
markup.add(item1)
bot.send_message(m.chat.id, 'Нажми на кнопку: \nХочу подарочек', reply_markup=markup)
@bot.message_handler(content_types=["text"])
def handle_text(message):
if message.text.strip() == 'Хочу подарочек':
bot.send_message(message.chat.id, facts)
bot.polling(non_stop=True)
В этом варианте бот отправляет только первую строчку.
Ответы (1 шт):
Автор решения: alex kliakhin
→ Ссылка
Проблема возникает из-за того, что вы используете список facts, который содержит все строки из файла, но вы отправляете только одну строку.
Если вы хотите отправлять строки из файла по очереди, то можно использовать переменную index для отслеживания номера последней отправленной строки и отправлять следующую строку при каждом нажатии на кнопку.
@bot.message_handler(content_types=["text"])
def handle_text(message):
global index
if message.text.strip() == 'Хочу подарочек':
if index < len(facts):
fact = facts[index]
bot.send_message(message.chat.id, fact)
index += 1