Подскажите как сделать что бы бот отправлял следующую строчку из файла

Рейтинг: 0Ответов: 1Опубликовано: 10.04.2023

Написал простого бота что бы по нажатию кнопки пользователь получал сообщение которое бот берет из 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)

В этом варианте бот отправляет только первую строчку.

Ответы

▲ 0Принят

Проблема возникает из-за того, что вы используете список 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