1

Тема: Допоможіть з написанням бота "синоптика"

#Імпортоване
import pyowm
import telebot
import random

#токени
owm = pyowm.OWM("fe132c88fb065cd7cd55155529ecc325" )
mgr = owm.weather_manager()
bot = telebot.TeleBot("1590832564:AAE1w75EgX5j-zqZLFn2pK371VwldKQE6V8")

#клавіатура
keyboard1 = telebot.types.ReplyKeyboardMarkup()
keyboard1.row('Привіт', 'Бувай', "Як справи?", "Прогноз погоди", "Рандомне число")

#команда /start
@bot.message_handler(commands = ["start"])
def welcome(message):
    bot.send_sticker(message.chat.id, 'CAACAgIAAxkBAAK0bGAEUtcoFP0Fg-0tkaF9dq3_DQzBAAIFAAPANk8T-WpfmoJrTXUeBA')
    bot.send_message(message.chat.id, "Привіт" + "!" + "Я - \"бот\" , створений,\n допомагати людям!!", reply_markup=keyboard1)

#відповіді на клавіатуру
@bot.message_handler(content_types = ["text"])
def message(message):
    if message.text == "Привіт":
        bot.send_message(message.chat.id, "Привіт")
    if message.text == "Бувай":
        bot.send_message(message.chat.id, "Бувай")
    if message.text == "Як справи?":
        bot.send_message(message.chat.id, "Добре, а у тебе як?")
    if message.text == "Прогноз погоди":
        bot.send_message("Ведіть місто: ")
        @bot.message_handler(content_types=["text"])
        def send_echo(message):
            [b]]#Тут має бути щось що дасть боту зрозуміти що він має використовувати дані з bot.send_message("Ведіть місто: ")[/b]
            observation = owm.weather_at_place(place)
            w = observation.get_weather
            temp = w.get_temperature("celsius")["temp"]


            if int(temp) < 10:
                coment = ("зараз дуже холодно бррррр!!")
            elif int(temp) < 20:
                coment = ("зараз холодно одягнись тепліше!")
            else:
                coment = ("тепло, одягай, що завгодно!")

            answer = ("В місті " + message.text + " " + str(w.detailed_status) + ", температура зараз в районі" + str(temp) + (coment))
    
            bot.send_message(message.chat.id, answer)
    
bot.polling( none_stop = True )

2

Re: Допоможіть з написанням бота "синоптика"

З чим саме допомога потрібна?

3

Re: Допоможіть з написанням бота "синоптика"

проблема в "#тут"

4

Re: Допоможіть з написанням бота "синоптика"

burdanazar86 написав:

проблема в "#тут"

Щоб Вам допомогли, тоді потрібно хоч трохи розписати проблему, розказати про роботу коду на словах, що є на вході, що ви хочете отримати на виході.
Дивно. Змахує на те що Ви просто стягнули скрипт із мережі вставили сюди. Для чого?

5 Востаннє редагувалося plusxx (20.01.2021 06:45:09)

Re: Допоможіть з написанням бота "синоптика"

Знайшов

]#Тут має бути щось що дасть боту зрозуміти що він має використовувати дані з bot.send_message("Ведіть місто: ")

Я так розумію що вам потрібно дізнатись як використати інформацію з message бо bot.send_message("Введіть місто:") лише відправляє повідомлення з запитанням причому не відомо кому бо не вказано перший парарметр котрий потребує дана функція тобто id чату
в вашому випадку

 bot.send_message(message.chat.id, "Введіть місто:")

Ніхто не знає як саме ви хочете  ті дані використати тому не може вам допомогти. Об'ясніть що повинно робитись з тими даними. Не І які саме дані ви хочете використати. Якщо ж це секрет то гугліть структуру об'єкта message вона схожа на json , і там є багато данних, навіть яка мова в становлеена в користувача на клієнті.

6 Востаннє редагувалося koala (20.01.2021 12:07:35)

Re: Допоможіть з написанням бота "синоптика"

Вас, схоже, заплутала концепція подій.
Коли ви пишете програму в консолі, все виконання іде лінійно: ви вивели "привіт" - чекаєте на відповідь - обробляєте її - виводите щось іще.
Тут все інакше. У вас є події, що викликають обробник. Обробник - це функція, яка працює "з нуля". Вона не знає нічого про попереднє спілкування, крім того, що їй передали. Якщо обробнику потрібна попередня інформація (наприклад, що користувач щось увів раніше) - значить, він має цю інформацію десь запитати (скажімо, в БД). Якщо обробник знає, що поточний стан спілкування - не кінець, то він має зберегти інформацію про це деінде (у тій же БД), щоб наступні виклики могли дізнатися, що відбувається. Якщо ви у відповідь на подію змінюватимете обробник - то це означатиме, що він змінюється не лише для цього користувача, а й для всіх інших.
Я б радив ще про скінчені автомати почитати, для повнішого розуміння проблеми.

7

Re: Допоможіть з написанням бота "синоптика"

Мені потрібно, щоб бот використовував дані отримані з з bot.send_message("Ведіть місто: ") щоб він потім почав шукати погоду за цими данними.

8

Re: Допоможіть з написанням бота "синоптика"

Якщо користувач обирає "Прогноз погоди" бот питає місто і потім за відповіддю користувача шукає її і виводить відповідь в чат

if message.text == "Прогноз погоди":
        bot.send.message(message.chat.id, "Виберіть місто: ")
        #тут має бути щось що дасть боту використовувати інфу з повідомлення користувача(якщо треба створювати бд то
        розкажіть будь-ласка як)
        observation = mgr.weather_at_place()
        w = observation.weather
        temp = w.temperature("celsius")["temp"]
        if int(temp) < 10:
            coment = ("зараз дуже холодно бррррр!!")
        elif int(temp) < 20:
            coment = ("зараз холодно одягнись тепліше!")
        else:
            coment = ("тепло, одягай, що завгодно!")

        answer = ("В місті " +  + " " + str(w.detailed_status) + ", температура зараз в районі" + str(temp) + (coment))
   
        bot.send_message(message.chat.id, answer)

9 Востаннє редагувалося plusxx (20.01.2021 16:42:42)

Re: Допоможіть з написанням бота "синоптика"

Дивіться яка річ перше що вам потрібно збережіть десь chat_id користувача  для початку можете просто зберігати в списку.
Потім додати умову якщо message.chat_id є в списку користувачів котрі прислали "Прогноз погоди" то викликаєте функцію send_echo(message) доречі їй не потрібен декоратор.

10

Re: Допоможіть з написанням бота "синоптика"

Ви говорите щоб я діяв через базу данних, а можна без неї? Щоб бот використовував те що дав йому користувач
    if message.text == "Прогноз погоди":
        bot.send.message(message.chat.id, "Виберіть місто: ")
        #І на цьому система закінчується. Я хочу щоб вона не закінчувалась а чекала поки користувач дасть відпоідь.
        observation = mgr.weather_at_place()
        w = observation.weather
        temp = w.temperature("celsius")["temp"]
        if int(temp) < 10:
            coment = ("зараз дуже холодно бррррр!!")
        elif int(temp) < 20:
            coment = ("зараз холодно одягнись тепліше!")
        else:Ж
            coment = ("тепло, одягай, що завгодно!")

        answer = ("В місті " +  + " " + str(w.detailed_status) + ", температура зараз в районі" + str(temp) + (coment))
   
        bot.send_message(message.chat.id, answer)

11

Re: Допоможіть з написанням бота "синоптика"

Кажу вам використайте звичайний список. Взагальному якось так:

...
user_list = []
#токени
owm = pyowm.OWM("fe132c88fb065cd7cd55155529ecc325" )
...
def message(message):
    if message.text == "Привіт":
        bot.send_message(message.chat.id, "Привіт")
    elif message.text == "Бувай":
        bot.send_message(message.chat.id, "Бувай")
    elif message.text == "Як справи?":
        bot.send_message(message.chat.id, "Добре, а у тебе як?")
    elif message.text == "Прогноз погоди":
         user_list.append(message.chat.id)
        bot.send_message(message.chat.id, "Введіть місто:")
    elif message.chat.id in user_list:
       send_echo(message) 
...

12

Re: Допоможіть з написанням бота "синоптика"

ащо за бібліотеку ви використовуєте?

13

Re: Допоможіть з написанням бота "синоптика"

Три telebot, pyowm, random(це все модулі)

14

Re: Допоможіть з написанням бота "синоптика"

Вибачте що дістаю а, що треба після mgr.weather_at_place?
elif message.chat.id in user_list:
        observation = mgr.weather_at_place(ось тут)

15

Re: Допоможіть з написанням бота "синоптика"

Ось там message.text скоріше всього. І ще раз вам пораджу все-таки погуглити структуру об'єкта message для telegram

Подякували: burdanazar861

16

Re: Допоможіть з написанням бота "синоптика"

добре дякую)