Парсинг с последущим выводом в бота ТГ
Пишу бота, но столкнулся с проблемой, что когда нажимаю на кнопку "Анекдот" получается ошибка NameError: name 'num' is not defined. Did you mean: 'sum'?. Как её решить, ведь мне нужный мне результат находится в переменной "num". (print оставил чтобы можно было проверить, парсятся ли вообще анекдоты)
import random
from telebot import types
import os
from sys import argv
from sys import exit as sysex
from lxml import etree
import requests
from html2text import html2text
f = open('data/army.txt', 'r', encoding='UTF-8')
army = f.read().split('\n')
f.close()
f = open('data/thinks.txt', 'r', encoding='UTF-8')
thinks = f.read().split('\n')
f.close()
bot = telebot.TeleBot('№№№')
def get_banek(addr):
req = requests.get('http://baneks.ru/' + addr)
req.encoding = 'utf-8'
parser = etree.HTMLParser()
root = etree.fromstring(req.text, parser)
li = root.xpath("//section[@class='anek-view']")
text = etree.tostring(li[0].find('article'))
return html2text(text.decode()).replace("\\-", "-")
def main():
if len(argv) == 1:
num = 'random'
elif argv[1].isdecimal():
num = argv[1]
print(get_banek(num))
if __name__ == '__main__':
main()
@bot.message_handler(commands=["start"])
def start(m, res=False):
markup=types.ReplyKeyboardMarkup(resize_keyboard=True)
item1=types.KeyboardButton("Анекдот")
item2=types.KeyboardButton("Поговорка")
item3=types.KeyboardButton("Афоризм")
markup.add(item1)
markup.add(item2)
markup.add(item3)
bot.send_message(m.chat.id, 'Нажми: \nАнекдот для получения анекдота\nПоговорка — для получения русской народной поговорки\n Афоризм - для получения армейского авторского афоризма', reply_markup=markup)
@bot.message_handler(content_types=['text'])
def handle_text(message):
if message.text.strip() == 'Афоризм' :
answer = random.choice(army)
bot.send_message(message.chat.id, answer)
if message.text.strip() == 'Поговорка':
answer = random.choice(thinks)
bot.send_message(message.chat.id, answer)
if message.text.strip()== 'Анекдот' :
answer = main()
bot.send_message(message.chat.id, answer)
bot.polling()