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


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

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

Войти через центр авторизации
Похожие вопросы
18 мая 2024, в 20:58
5000 руб./за проект
18 мая 2024, в 20:53
500 руб./за проект
18 мая 2024, в 20:24
200000 руб./за проект