@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)
  • Вопрос задан
  • 109 просмотров
Решения вопроса 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}")


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

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

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