metalexs
@metalexs

Как обратится к функции вне handler?

Всем привет. Написал скрипт который парсит нужные мне новости с сайта каждые N минут и записывает списком в файл "politics.txt". (для того, чтобы не нагружать сайт частыми запросами из самого бота).
Ниже разместил код, который считывает регуляркой "politics.txt" и часть кода бота.
Замысел такой, что пользователь будет выбирать рубрику ("Политика"), ему выдаваться из resault_func[0] ссылка на новость и удаляться del resault_func[0], чтобы избежать повтора.
После нажатия кнопки "Еще политика" уже выдается следующая ссылка из списка resault_func. Но когда все ссылки из списка перебираются - выдает ошибку - это понятно.
Не могу понять как можно обратиться к функции fi(fil_1) когда закончится список, чтобы заново забрать список из "politics.txt" и записать их в resault_func. Я даже не могу понять как хотя бы просто обратиться к функции fi(fil_1) для обновления списка. Хотел сам разобраться, но 3-й день пошел ((. Прошу помочь.

fil = "politics.txt"

def fi(fil_1):

    file = open(fil_1, "r") 
    polit = file.read() 
    polit_p = re.findall("'(.+?)'", polit)  
    
    return polit_p

resault_func = fi(fil)

@bot.message_handler(commands=["start"])
def func(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    btn1 = types.KeyboardButton("Новости")
    markup.add(btn1)
    bot.send_message(message.chat.id, text="<b>Привет, {0.first_name}!</b>".format(message.from_user),
                     parse_mode="html", reply_markup=markup)

@bot.message_handler(content_types=["text"])
def func1(message):
    if (message.text == "Новости"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=2)
        btn1 = types.KeyboardButton("Политика")
        markup.add(btn1)
        bot.send_message(message.chat.id, "Выберите рубрику", reply_markup=markup)

    
    elif (message.text == "Политика" or message.text == "Еще политика"):
        markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
        btn1 = types.KeyboardButton("Еще политика")
        btn2 = types.KeyboardButton("Назад в новости")
        markup.add(btn1, btn2)
        bot.send_message(message.chat.id, str(resault_func[0]), reply_markup=markup)
        del resault_func[0]
       
    
bot.polling(none_stop=True)
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
global resault_func
resault_func = fi(fil)

Примерно так и обращайся.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы