Задать вопрос
@s1zen

Не могу изменить сообщение Telebot Python. Что не так я делаю?

import telebot
from telebot import types
from config import BOT_TOKEN 
import requests
import keyboard as kd
from pprint import pprint
import datetime

bot = telebot.TeleBot(BOT_TOKEN)
print("Запускаю...")

# API:
url = f"https://www.cbr-xml-daily.ru/daily_json.js"
r = requests.get(url)
data = r.json()


# commands:
@bot.message_handler(commands=['start'])
def starting(message):
    bot.send_message(message.chat.id, "Привет, я знаю курс валют.", reply_markup=kd.starting)
@bot.callback_query_handler(func=lambda call: True)
def choice_course(call):
    today = datetime.datetime.now()
    date_and_time = (today.strftime('%Y-%m-%d %H:%M:%S'))
    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выберите валюту", reply_markup=kd.choice_cource)
    usd  = data['Valute']['USD']['Value']
    usd_name = data['Valute']['USD']['Name']
@bot.callback_query_handler(func=lambda call: True)
def course(call):
    if call.data == 'usd':
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=f"На {date_and_time}\n\nКурс {usd_name}: {usd}")














if __name__ == '__main__':
    bot.polling(none_stop=True)
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@twistfire92
Python backend developer
у вас два одинаковых обработчика кнопок, которые обрабатывают одинаковые запросы.
@bot.callback_query_handler(func=lambda call: True)

При нажатии на кнопку идет поиск соответствующего обработчика сверху вниз. натыкается на первый и во второй вообще никогда не заходит.

либо обработку кнопок делать в одном хэндлере

@bot.callback_query_handler(func=lambda call: True)
def choice_course(call):
    if call.data == 'usd':
            bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=f"На {date_and_time}\n\nКурс {usd_name}: {usd}")
    else:
        today = datetime.datetime.now()
        date_and_time = (today.strftime('%Y-%m-%d %H:%M:%S'))
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text="Выберите валюту", reply_markup=kd.choice_cource)
        usd  = data['Valute']['USD']['Value']
        usd_name = data['Valute']['USD']['Name']


Либо в самих хэндлерах описывать правильную функцию
@bot.callback_query_handler(func=lambda call: call.data=='usd')
def course(call):
    bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id, text=f"На {date_and_time}\n\nКурс {usd_name}: {usd}")


Но в таком случае этот хэндлер нужно поставить выше по коду чем предыдущий.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽