Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2021 11:32:05

Aibek132
Зарегистрирован: 2021-04-24
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Попытка соеденить два кода

Я хочу соединить два кода, добавив эту функцию к телеграм боту
Но выходит ошибка.



Вотан код пагоды:

 from pyowm import OWM
from pyowm.utils import config as cfg
from colorama import init
from colorama import Fore, Back, Style
 
 # используйте Colorama, чтобы заставить Termcolor работать и на Windows
init()
print( Fore.BLACK)
print( Back.YELLOW)
config = cfg.get_default_config()
config['language'] = 'ru'
 
place = input("Какой город/страна?: ")
print( Back.CYAN)
 
owm = OWM('2302a1072316c2a336ceb0accc9265c9', config)
 
mgr = owm.weather_manager()
observation = mgr.weather_at_place(place)
w = observation.weather
 
# извлечение из словаря dict['key']
temp = w.temperature('celsius')['temp']
speed = w.wind()['speed']
 
# w.detailed_status - это строка, не метод
print( "В городе " + (place) + " сейчас " + w.detailed_status + "!")
print( "температура в районе " + str(temp))
print( "Скорость ветра " + str(speed))
print( "Влажность " + str(w.humidity))
 
# сначала нужна проверка < 20
if temp < 20:
    print( "Сейчас ппц как холодно! оденься очень тепло" )
elif temp < 10:
    print( "Сейчас холодно, желательно одеться по теплее" )  
else:
    print( "Температура нормальная, одевай что хочешь " )


Вотан телеграм бот:
(эхо)


 import telebot
bot = telebot.TeleBot("1732855264:AAGYkxxK_sPhcBi_5jzYYi72DTOWfqx6jFY")
@bot.message_handler( content_types=['text'] )
def send_echo( message ):
    bot.send_message(message.chat.id, message.text)
bot.polling( none_stop = True )

И вот как я попытался сделать:

 from pyowm import OWM
from pyowm.utils import config as cfg
import telebot
owm = OWM('2302a1072316c2a336ceb0accc9265c9', config)
bot = telebot.TeleBot("1732855264:AAGYkxxK_sPhcBi_5jzYYi72DTOWfqx6jFY")
@bot.message_handler( content_types=['text'] )
def send_echo( message ):
    mgr = owm.weather_manager()
    observation = mgr.weather_at_place( message.text )
    w = observation.weather
    
    # извлечение из словаря dict['key']
    temp = w.temperature('celsius')['temp']
    speed = w.wind()['speed']
    # w.detailed_status - это строка, не метод
    answer = "В городе " + message.text + " сейчас " + w.detailed_status + "!" + "\n"
    answer += "температура в районе " + str(temp) + "\n\n"
    # сначала нужна проверка < 20
    if temp < 20:
        answer += "Сейчас ппц как холодно! оденься очень тепло" 
    elif temp < 10:
        answer += "Сейчас холодно, желательно одеться по теплее"
    else:
        answer += "Температура нормальная, одевай что хочешь" 
   
     bot.send_message(message.chat.id, message.text)
bot.polling( none_stop = True )

Отредактировано Aibek132 (Апрель 25, 2021 11:34:41)

Офлайн

#2 Апрель 26, 2021 00:32:43

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9731
Репутация: +  843  -
Профиль   Отправить e-mail  

Попытка соеденить два кода

Aibek132
Я хочу соединить два кода, добавив эту функцию к телеграм боту
Ты код определения погоды оставь в отдельном файле, например weather.py . В самом файле определения погоды сделай функцию, которая определяет погоду и возвращает нужную строку (не через print, а через return), например get_weather_info() . После этого ты этот файл weather.py импортируешь в своём скрипте, где у тебя Telegram-бот и вызываешь у этого импортированного скрипта функцию просто, которая определяет погоду и возвращает строку.

Так у тебя в Telegram-боте будет просто строка
  
import weather
 
...
 
def send_echo(message):
 
    ...
 
    answer = weather.get_weather_info()
 
    ...



Отредактировано py.user.next (Апрель 26, 2021 00:33:24)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version