Написал бота для ТГ на python(Погода, валюта и т.д), при нажатий на погоду выходит (Сейчас погода: {'cod': '404', 'message': 'city not found'})
Написал бота для Телеграмма по видео на Youtube. Функций данного бота: Вывод погоды, рандом число, курс валют(еще в процессе). Сделал меню из кликабельных кнопок, но при нажатий на "Погода" выходит "Введите название города:", и после этого сразу ошибка, т.е бот как будто отвечает на сообщение "Погода". Как сделать так что бы бот отвечал на то, что напишу я в чате? Не судите строго, только начинаю в этом разбираться. Скрины прикреплю.
Вот сам код:
import telebot
import random
import requests
import json
import datetime
from telebot import types
API = 'api'
TOKEN = 'token'
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def welcome(message):
sti = open('static/welcome.webp', 'rb')
bot.send_sticker(message.chat.id, sti)
# keyboard
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("? Рандомное число")
item2 = types.KeyboardButton("? Курс валют")
item3 = types.KeyboardButton("⛅️ Погода")
markup.add(item1, item2, item3)
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 get_weather(message):
if message == '⛅️ Погода':
bot.send_message(message.chat.id, str('Введите название города:'))
city = message.text.strip().lower()
res = requests.get(f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API}&units=metric')
bot.reply_to(message, f'Сейчас погода: {res.json()}')
bot.polling(none_stop=True)
Ответы (1 шт):
Автор решения: gord1402
→ Ссылка
Попробуйте так используя register_next_step_handler
:
import telebot
import random
import requests
import json
import datetime
from telebot import types
TOKEN = 'токен'
API = ""
bot = telebot.TeleBot(TOKEN)
@bot.message_handler(commands=['start'])
def welcome(message):
sti = open('static/welcome.webp', 'rb')
bot.send_sticker(message.chat.id, sti)
# keyboard
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("? Рандомное число")
item2 = types.KeyboardButton("? Курс валют")
item3 = types.KeyboardButton("⛅️ Погода")
markup.add(item1, item2, item3)
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 button_handler(message):
if message.text == '⛅️ Погода':
bot.send_message(message.chat.id, 'Введите название города:')
bot.register_next_step_handler(message, get_weather)
def get_weather(message):
city = message.text.strip().lower()
res = requests.get(f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API}&units=metric')
bot.reply_to(message, f'Сейчас погода: {res.json()}')
bot.polling(none_stop=True)