S
S
sunekosuri2021-04-08 18:04:25
Python
sunekosuri, 2021-04-08 18:04:25

Why do subsequent functions stop working after a function?

After the function of recognizing the weather in the city, the following function does not work.

#telegram bot test v2.0

import telebot
from telebot import types
import requests
import pyowm

#токены 
bot = telebot.TeleBot(" вставьте токен ")
owm = "467ea980ff4abba25b2437e0536e9372"
url = 'http://api.openweathermap.org/data/2.5/weather'
#- - - - - - - - - - - - - - - -

#start
@bot.message_handler(commands=['start'])
def handle_start(message):
    bot.send_message(message.chat.id, "Приветствую, студент.")
    bot.send_message(message.chat.id, "Ты попал в чат-бот Беловского педагогического колледжа.")
    bot.send_message(message.chat.id, "Напишите /help чтобы ознакомиться с функциями или выберите пункт меню.")
#- - - - - - - - - - - - - - - -

#help
@bot.message_handler(commands=['help'])
def handle_help(message):
    bot.send_message(message.chat.id, "Напиши /weather чтобы узнать погоду.\n /keyboard")
#- - - - - - - - - - - - - - - -

#keyboard
@bot.message_handler(commands=['keyboard','start'])
def hendler_keyboard(message):
  kb = types.ReplyKeyboardMarkup(True)
  kb.row('Звонки')
  kb.row('☔️ Погода ☀️')

  bot.send_message(message.chat.id,"Выберите пункт меню:" , reply_markup=kb)
 # bot.send_message(message.chat.id, 'К сожалению я еще не умею читать текст. Воспользуйтесь главным меню:', reply_markup=kb)	#Отправка меню
  #bot.send_message(message.chat.id, "Выберите пункт меню:", reply_markup=markup) - Эта строка вообще лишняя, главное меню отправляется строкой выше.
#- - - - - - - - - - - - - - - -



#weather
@bot.message_handler(content_types=['text'])
def handle_weather(message):
  city_name = "Белово"
  wet = ['Погода','погода','/weather']
  for weathers in wet: #для погод в погоде
    if weathers in message.text:
        try:
          params = {'APPID': owm, 'q': city_name, 'units': 'metric', 'lang': 'ru'}
          result = requests.get(url, params=params)
          weather = result.json()

          if weather["main"]['temp'] < 10:
            status = "прохладно!"
          elif weather["main"]['temp'] < 20:
            status = "тепло!"
          elif weather["main"]['temp'] > 38:
            status = "жарко!"
          elif weather["main"]['temp'] > -10:
            status = "холодно!"	
          elif weather["main"]['temp'] > -20:
            status = "очень холодно!"	
          else:
            status = ""

          bot.send_message(message.chat.id, "В " + str(weather["name"]) +" сейчас " + status + "\n" 
            "Температура в районе:  " + str(float(weather["main"]['temp'])) + "°C \n" + 
            "Скорость ветра:  " + str(float(weather['wind']['speed']))  + " м/с \n" + 
            "Давление:  " + str(float(weather['main']['pressure'])) +  " hPa \n" + 
            "Влажность:  " + str(int(weather['main']['humidity'])) + "% \n\n" +
            "За окном " + str(weather['weather'][0]["description"]) + ".")
        except:
          bot.send_message(message.chat.id, "")
#- - - - - - - - - - - - - - - -
#rings
@bot.message_handler(content_types=['text'])
def handle_rings(message):
  rig = ['Звонки','звонки','Звонок','/rings','звонок']
  for rings in rig: #для погод в погоде
    if rings in message.text:					
        bot.send_message(message.chat.id, "Звонки работают")



#чтобы не выключался
if __name__ == '__main__':
  bot.polling(none_stop=True)
#- - - - - - - - - - - - - - - -

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
soremix, 2021-04-08
@sunekosuri

Because two identical decorators
@bot.message_handler(content_types=['text'])
Either combine all text content into one function, or create filter functions

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question