hleb_ets
@hleb_ets
Новичок в Python и в Telegram ботах.

Терминал выдает ошибку при запуске файла с ботом и некоректно работает погода. Сможете помочь?

# Telegram HlebetsBot
import pyowm
import telebot
import random
import config

from telebot import types

owm = pyowm.OWM('...', language = "ru")
bot = telebot.TeleBot(config.TOKEN)

@bot.message_handler(commands=['start'])
def welcome(message):
    sti = open('/contents/sticker.webp', 'rb')
    bot.send_sticker(message.chat.id, sti)

    #keyboard
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
    item1 = types.KeyboardButton("Случайное число")
    item2 = types.KeyboardButton("Погода")

    markup.add(item1, item2)

    bot.send_message(message.chat.id, "Привет, {0.first_name}!\nЯ - <b>{1.first_name}</b>, твой Телеграм асистент, есть вопрос обратись ко мне, я с радостью помогу.".format(message.from_user, bot.get_me()),
    parse_mode = 'html', reply_markup = markup)

@bot.message_handler(content_types =['text'])
def lalala(message):
    if message.chat.type == 'private':
        if message.text == 'Случайное число':
            bot.send_message(message.chat.id, str(random.randint(0, 100)))
        elif message.text == 'Погода':
            bot.send_message(message.chat.id, "Введите название города")
        observation = owm.weather_at_place(message.text)
        w = observation.get_weather()
        temp = w.get_temperature('celsius')["temp"]

        answer = "В " + message.text + " сейчас " + w.get_detailed_status() + "\n"
        answer += "Температура в районе " + str(temp) + "\n\n"

        if temp < 10:
            answer += "Сейчас достаточно достаточно холодно, одень куртку"
        elif temp < 20:
            answer += "Сейчас прохладно, возьми что нибудь полегче чем куртка"
        else:
            answer += "Сейчас тепло, одень что нибудь легкое"

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

# RUN
if __name__ == '__main__':
    bot.polling( none_stop = True )


Ошибка из терминала:
Traceback (most recent call last):
File "telebot.py", line 10, in
bot = telebot.TeleBot(config.TOKEN)
AttributeError: module 'config' has no attribute 'TOKEN'

Коментарий к ошибке: файл config.py у меня есть в той же папке и токен тоже.

Что нужно с погодой:
При нажатии на кнопку погода спрашивает город но я не пойму как сделать так чтобы она считывала название города (которое напишет юзер) и говорила данные о погоде, а при ошибке выдавала что-то типа (город не найден).
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Скорее всего bot = telebot.TeleBot(config.token)
import telebot
import pyowm

owm = pyowm.OWM('key', language = "ru")
bot = telebot.TeleBot('token')

@bot.message_handler(content_types=['text'])
def send_echo(message):
  try:
    observation = owm.weather_at_place( message.text )
    w = observation.get_weather()
    temp = w.get_temperature('celsius')["temp"]
    hum = w.get_humidity()
    time = w.get_reference_time(timeformat='iso')
    wind = w.get_wind()["speed"]

    answer ="В городе " + message.text + " сейчас " + w.get_detailed_status() + "\n"
    answer += "Температура сейчас в районе " + str(temp) + "\n\n" + "\nСкорость ветра: " + str(wind) + "м/с" + "\n" + "\nВлажность: " + str(hum) + "%" + "\n" + "\nВремя: " + str(time) + "\n"

    if temp < 11:
      answer += "Сейчас очень холодно."
    elif temp < 20:
      answer += "Сейчас прохладно, лучше одеться потеплее."
    else:
      answer += "Температура в норме!"

    bot.send_message(message.chat.id, answer)
  except pyowm.exceptions.api_response_error.NotFoundError:
    bot.send_message(message.chat.id,'Ошибка! Город не найден.')
  except pyowm.exceptions.api_response_error.UnauthorizedError:
  	print('Не верный ключ pyowm!')

bot.polling( none_stop = True)
input()

5e51c6541e19e731240098.png
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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