@sunekosuri

Почему после функции перестают работать последующие функции?

После функции узнаванием погоды в городе, не работает следующая функция.
#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)
#- - - - - - - - - - - - - - - -
  • Вопрос задан
  • 92 просмотра
Решения вопроса 2
SoreMix
@SoreMix Куратор тега Python
yellow
Потому что два одинаковых декоратора
@bot.message_handler(content_types=['text'])

Либо объединяйте весь текстовый контент в одну функцию, либо создавайте функции-фильтры
Ответ написан
Комментировать
jerwright
@jerwright
while True: coding()
Вы используете такие части кода, как:
@bot.message_handler(commands=['keyboard','start'])
Функция с использованием команды start уже была выше, поэтому программа не доходит до этой части кода для команды 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 чтобы ознакомиться с функциями или выберите пункт меню.")
    hendler_keyboard(message)


А здесь нужно оставить только keyboard:
@bot.message_handler(commands=['keyboard','start'])


Аналогично и с content_types=['text']. Вам нужно объединить эти две части кода в одну функцию.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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