@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)
  • Вопрос задан
  • 43 просмотра
Решения вопроса 1
@twistfire92
у вас два одинаковых обработчика кнопок, которые обрабатывают одинаковые запросы.
@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}")


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

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

Войти через центр авторизации
Похожие вопросы
15 июн. 2021, в 17:17
20000 руб./за проект
15 июн. 2021, в 16:58
15000 руб./за проект
15 июн. 2021, в 16:34
5000 руб./за проект