Почему не работает?(PyTelebot)
Что не так в части кода телеграмм бота? Всё работает ДО def send_weather(message): а дальше(по задумке) пользователь вводит название города, бот ему отвечает что и как в этом городе. Но ничего не происходит, если нажать кнопку "Узнать погоду", то бот попросит опять ввести город и так по кругу.
from pyowm.owm import OWM
from pyowm.utils.config import get_default_config
from pyowm.utils import timestamps
import telebot
from telebot import types
config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('мой токен', config_dict)
bot = telebot.TeleBot("мой токен")
owm.supported_languages
#ЗДЕСЬ ПОСЛЕ КОМАНДЫ /START ВЫХОДИТ ПРИВЕТСТВИЕ ПОЛЬЗОВАТЕЛЯ И СПРАШИВАЕТ ЧТО ДЕЛАТЬ
@bot.message_handler(commands=['start'])
def start(message):
sticker = open('static/sticker.webp', 'rb')
bot.send_sticker(message.chat.id, sticker)
markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
item1 = types.KeyboardButton("Узнать погоду")
markup.add(item1)
bot.send_message(message.chat.id, "Привет, {0.first_name}! \n Я - <b>{1.first_name}</b> бот, который поможет тебе узнать погоду в любом городе!\n Что ты хочешь сделать?".format(message.from_user, bot.get_me()),
parse_mode="html", reply_markup=markup)
@bot.message_handler(content_types=['text'])
def weather(message):
if message.chat.type == 'private':
if message.text == 'Узнать погоду':
bot.send_message(message.chat.id, "Хорошо, {0.first_name} \nВведи название интересующего тебя города".format(message.from_user, bot.get_me))
#ПОЛЬЗОВАТЕЛЬ ВВОДИТ НАЗВАНИЕ ГОРОДА И БОТ ЕМУ ОТВЕЧАЕТ ПО ПОГОДЕ
bot.message_handler(content_types=['text'])
def send_weather(message):
mgr = owm.weather_manager()
observation = mgr.weather_at_place( message.text )
w = observation.weather
temp = w.temperature('celsius')["temp"]
answer = " В городе " + message.text + " сейчас " + w.detailed_status + "\n"
answer += "Температура сейчас около " + str((round(temp))) + "\n\n"
bot.send_message(message.chat.id , answer)
bot.polling(none_stop = True)
А если убрать всё, оставить только такой код, пользователь вводит просто название города и функция работает) Что не так в первом коде??(
from pyowm.owm import OWM
from pyowm.utils.config import get_default_config
from pyowm.utils import timestamps
import telebot
config_dict = get_default_config()
config_dict['language'] = 'ru'
owm = OWM('токен', config_dict)
bot = telebot.TeleBot("токен", parse_mode=None)
owm.supported_languages
@bot.message_handler(content_types=['text'])
def send_weather(message):
mgr = owm.weather_manager()
observation = mgr.weather_at_place( message.text )
w = observation.weather
temp = w.temperature('celsius')["temp"]
answer = " В городе " + message.text + " сейчас " + w.detailed_status + "\n"
answer += "Температура сейчас около " + str((round(temp))) + "\n\n"
bot.send_message(message.chat.id , answer)
bot.polling(none_stop = True)
Ответы (1 шт):
Автор решения: try_Vellum
→ Ссылка
Почитай документацию на тему next_step_handler, очень поможет и упростит жизнь https://github.com/eternnoir/pyTelegramBotAPI/blob/master/examples/step_example.py