Доброго времени суток, уважаемые програмисты.
Пытаюсь сделать бота который будет показывать погоду при нажатии на определенную кнопку, а при нажатии на кнопку анекдот, будет рассказывать анекдот. Но у меня конфликтуют слова text и работает только одна из кнопок, а не две одновременно. В написании ботов и программировании в целом 3-ий день, поэтому попрошу разжевать материал, а если возможно отредактировать код для его работоспособности. Заранее спасибо, уважаемые программисты.
import pyowm
import telebot
import requests
from bs4 import BeautifulSoup as BS
from telebot import types
#Кнопки
#Кнопки
bot = telebot.TeleBot("") #Токен бота из Bot_Father
#Погода
r = requests.get('https://sinoptik.ua/погода-москва')
bot = telebot.TeleBot("") #Токен бота из Bot_Father
html = BS(r.content, 'html.parser')
for el in html.select('#content'):
t_min = el.select('.temperature .min')[0].text
t_max = el.select('.temperature .max')[0].text
text = el.select('.wDescription .description')[0].text
@bot.message_handler(commands=['weather'])
def main(message):
bot.send_message(message.chat.id, "Погода на сегодня:\n" +
t_min + ', ' + t_max + '\n' + text)
#Погода
#Анекдот
#Анекдот
#Клавиатура Начальная
def main():
markup = types.ReplyKeyboardMarkup(True)
key1 = types.KeyboardButton('Погода')
key3 = types.KeyboardButton("Анекдот")
markup.add(key1)
markup.add(key3)
return markup
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, 'Выбери что тебе нужно)', reply_markup=main())
@bot.message_handler(content_types=['text'])
def cont(message):
if message.text == 'Погода':
bot.send_message(message.chat.id, "Погода на сегодня:\n" +
t_min + ', ' + t_max + '\n' + text)
elif message.text == "Анекдот":
receive = requests.get("http://anekdotme.ru/random")
page = BS(receive.text, "html.parser")
find = page.select(".anekdot_text")
for text in find:
page = (text.getText().strip())
bot.send_message(message.chat.id, page)
else:
bot.send_message(message.chat.id, 'Я тебя не понимаю', reply_markup=main())
#Клавиатура Начальная
bot.polling(none_stop=True)
Спасибо всем за ответы. Пока что только начинаю разбираться в этой теме и от этого такие глупые ошибки. Да, текст в основном копипастил с разных ресурсов и пытался настроить его на хорошую работу вместе.
Объясню ошибку. При нажатии на кнопку “Анекдот”, он рассказывает мне анекдот, а когда нажимаю на кнопку “Погода”, он выдаёт ошибку следующего содержания:
2020-11-23 15:24:00,833 (util.py:75 WorkerThread3) ERROR - TeleBot: "UnboundLocalError occurred, args=("local variable 'text' referenced before assignment",)
Traceback (most recent call last):
File "C:\Users\Админ\PycharmProjects\nastuxa\venv\lib\site-packages\telebot\util.py", line 69, in run
task(*args, **kwargs)
File "C:/Users/Админ/PycharmProjects/nastuxa/Bot12.py", line 53, in cont
t_min + ', ' + t_max + '\n' + text)
UnboundLocalError: local variable 'text' referenced before assignment
"
Traceback (most recent call last):
File "C:/Users/Админ/PycharmProjects/nastuxa/Bot12.py", line 84, in <module>
bot.polling(none_stop=True)
File "C:\Users\Админ\PycharmProjects\nastuxa\venv\lib\site-packages\telebot\__init__.py", line 427, in polling
self.__threaded_polling(none_stop, interval, timeout)
File "C:\Users\Админ\PycharmProjects\nastuxa\venv\lib\site-packages\telebot\__init__.py", line 451, in __threaded_polling
self.worker_pool.raise_exceptions()
File "C:\Users\Админ\PycharmProjects\nastuxa\venv\lib\site-packages\telebot\util.py", line 118, in raise_exceptions
six.reraise(self.exc_info[0], self.exc_info[1], self.exc_info[2])
File "C:\Users\Админ\PycharmProjects\nastuxa\venv\lib\site-packages\six.py", line 703, in reraise
raise value
File "C:\Users\Админ\PycharmProjects\nastuxa\venv\lib\site-packages\telebot\util.py", line 69, in run
task(*args, **kwargs)
File "C:/Users/Админ/PycharmProjects/nastuxa/Bot12.py", line 53, in cont
t_min + ', ' + t_max + '\n' + text)
UnboundLocalError: local variable 'text' referenced before assignment
Process finished with exit code 1.