Задать вопрос
Razgildai
@Razgildai
Изучаю Python...

Python — бот для телеграмм с погодой?

Всем привет.
Начал изучение Python с написания простенького бота для ТГ с погодой и столкнулся с проблемой.
Бот запускается в консоле, ошибок не выдает, но ни как не реагирует на сообщения в чате.
При этом когда делал бота эхо, повторяющего сообщения, все работало корректно, так же и с погодой, работало корректно в консоле, но стоило их объединить и что то сломалось.
Где я ошибся?

Юзал pip pyTelegramBotAPI и pip pyowm

# telegramBot

import telebot
from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps
from pyowm.utils.config import get_default_config

config_dict = get_default_config()
config_dict['language'] = 'ru' 

owm = OWM('your free OWM API key', config_dict)
mgr = owm.weather_manager() 
bot = telebot.TeleBot("TOKEN" )

@bot.message_handler(content_types=['text'])
def send_echo(message):
	observation = mgr.weather_at_place(message.text)
	w = observation.weather
	
	temp = w.temperature('celsius')["temp"]
	tempMin = w.temperature('celsius')["temp_min"]
	tempMax = w.temperature('celsius')["temp_max"]
	WindSpeed = w.wind()["speed"]

	answer = "В городе " + message.text + " сейчас " + w.detailed_status 
	answer += "\nТемпература на улице, примерно " + str(temp) + " градусов."
	answer += "\nМаксимальная температура " + str(tempMax) + " градусов." 
	answer += "\nМинимальная температура " + str(tempMin) + " градусов."
	answer += "\nСкорость ветра " + str(WindSpeed) + " метров в секунду.\n\n"


	if temp < 5:
		answer += "Сейчас довольно холодно, не забудь одеть шапку!"
	elif temp < 20:
		answer += "На улице прохладно, одевайся теплее."
	else:
		answer += "Температура комфортная для прогулки!"

	bot.send_message(message.chat.id, answer)

bot.polling(none_stop = True)
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Бот не запущен, нет метода отправки сообщени пользователю
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
JiMoon
@JiMoon
меня тут ненавидят, потому что я говнокодер.
исправлю ваш код.
import telebot
from pyowm import OWM
from pyowm.utils import config
from pyowm.utils import timestamps
from pyowm.utils.config import get_default_config

config_dict = get_default_config()
config_dict['language'] = 'ru' 

owm = OWM('your free OWM API key', config_dict)
mgr = owm.weather_manager() 
bot = telebot.TeleBot("TOKEN" )

@bot.message_handler(commands=['start'])
def city(message):
    msg = bot.send_message(message.chat.id, "Пожалуйста, укажите ваш город."
    bot.register_next_step_handler(send_echo, msg)

def send_echo(message):
  observation = mgr.weather_at_place(message.text)
  w = observation.weather
  temp = w.temperature('celsius')["temp"]
  tempMin = w.temperature('celsius')["temp_min"]
  tempMax = w.temperature('celsius')["temp_max"]
  WindSpeed = w.wind()["speed"]

  answer = "В городе " + message.text + " сейчас " + w.detailed_status 
  answer += "\nТемпература на улице, примерно " + str(temp) + " градусов."
  answer += "\nМаксимальная температура " + str(tempMax) + " градусов." 
  answer += "\nМинимальная температура " + str(tempMin) + " градусов."
  answer += "\nСкорость ветра " + str(WindSpeed) + " метров в секунду.\n\n"


  if temp < 5:
    answer += "Сейчас довольно холодно, не забудь одеть шапку!"
  elif temp < 20:
    answer += "На улице прохладно, одевайся теплее."
  else:
    answer += "Температура комфортная для прогулки!"

bot.polling()
Ответ написан
Ваш ответ на вопрос

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

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