Python telebot кнопки

chapo

🫡 В армии с 17.10.2023. В ЛС НЕ ОТВЕЧАЮ
Автор темы
Друг
8,763
11,199
Как сделать такие кнопки? Если текст кнопки "/get", то все норм, но если изменить текст кнопки на "Узнать погоду", то бот ничего не отправляет в ответ
1630757058372.png

python:
@bot.message_handler(commands=['start'])
def start_command(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('узнать погоду')
    bot.send_message(message.chat.id, 'Привет!', reply_markup=keyboard)
    bot.send_message(message.chat.id, 'Привет, ты запустил бота Chapos Weather Bot, напиши "/get" если хочешь узнать погоду (леха пасаси)')
    
@bot.message_handler(commands=['узнать погоду'])
def start_command(message):
    res = requests.get(api_url + 'id=' + cityid + '&units=' + cf + '&APPID=' + apikey)
    if res.status_code == 200:
        bot.send_message(message.chat.id, 'Ожидание ответа от api.openweathermap.org...')
        res_payload_dict = res.json()
        data = res.json()

        bot.send_message(message.chat.id, 'Город: ' + str(data['name']) + '\nТемпература: ' + str(data['main']['temp']) + ' (ощущается как ' + str(data['main']['feels_like']) + ')')
    else:
        bot.send_message(message.chat.id, 'Ошибка при обращении к API')
 

Josski Molodoi

Активный
182
85
Я делал по другому, создавал кнопку с текстом, при её нажатии отправлялся текст, и обработчиком перехватывал его, и выдавал какую-нибудь функцию. Насчёт callback data в кнопках такого типа, я сам не знаю :)
Насколько я понял callback есть только у InlineKeyboardMarkup. (кнопки на сообщениях, а не снизу)


Python:
@bot.message_handler(commands=['start'])
def start(message):
    """sticker"""
    #start_sticker = open('stickers/hello_sticker.tgs', 'rb')

    """start keyboard"""
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=3)
    button1 = types.KeyboardButton('Узнать погоду в городе')
    markup.add(button1)
   
    """start message"""
    #bot.send_sticker(message.chat.id, start_sticker)
    bot.send_message(message.chat.id, 'Привет!\nЯ помогу тебе узнать погоду в городе.\n\nПросто нажми на кнопку ниже,\nили используй команду /weather.', reply_markup=markup)
   
@bot.message_handler(content_types=['text'])
def sendweather(message):
    global city

    if message.text == 'Узнать погоду в городе':
        """YOUR CODE"""
 

Neon3333

Известный
181
71
Вы че совсем уже инопланетяне обдолбаные, я ипу. Какие нах колбэки для текстовых кнопок вы че...
Хотя тут и не только такого начитаться можно🔞

Как сделать такие кнопки? Если текст кнопки "/get", то все норм, но если изменить текст кнопки на "Узнать погоду", то бот ничего не отправляет в ответ
Посмотреть вложение 113248
python:
@bot.message_handler(commands=['start'])
def start_command(message):
    keyboard = telebot.types.ReplyKeyboardMarkup(True)
    keyboard.row('узнать погоду')
    bot.send_message(message.chat.id, 'Привет!', reply_markup=keyboard)
    bot.send_message(message.chat.id, 'Привет, ты запустил бота Chapos Weather Bot, напиши "/get" если хочешь узнать погоду (леха пасаси)')
   
@bot.message_handler(commands=['узнать погоду'])
def start_command(message):
    res = requests.get(api_url + 'id=' + cityid + '&units=' + cf + '&APPID=' + apikey)
    if res.status_code == 200:
        bot.send_message(message.chat.id, 'Ожидание ответа от api.openweathermap.org...')
        res_payload_dict = res.json()
        data = res.json()

        bot.send_message(message.chat.id, 'Город: ' + str(data['name']) + '\nТемпература: ' + str(data['main']['temp']) + ' (ощущается как ' + str(data['main']['feels_like']) + ')')
    else:
        bot.send_message(message.chat.id, 'Ошибка при обращении к API')
Посмотри на "свой" код, если у тебя полная паста, то возьми потрать 2 мин времени и открой доку к либе, которую используешь, питоновский код можно читать как книгу и я поражаюсь тому, как вы умудряетесь проебаться даже тут.. У тебя в хэндлере
-_-:
commands=['узнать погоду']
Вот и ждет твой телебот не сообщение с текстом узнать погоду, а сообщение с текстом /узнать погоду, потому что хэндлер у тебя на команду.
И вообще, пока не ушел далеко, очень советую
True way:
pip uninstall pyTelegramBotAPI
pip install aiogram
 
Последнее редактирование:
  • Ха-ха
Реакции: Josski Molodoi