【问题标题】:Telegram permitted callback_data size less than file_id sizeTelegram 允许的 callback_data 大小小于 file_id 大小
【发布时间】:2020-05-24 08:44:34
【问题描述】:

我需要像这样在回调数据中重新发送文件 ID:

cd1 = 'publish {}'.format(new_file_id)
cd2 = 'delayed 1 {} *'.format(new_file_id)
...
markup = types.InlineKeyboardMarkup(1)
btn1 = types.InlineKeyboardButton(text='Publish',
                                      callback_data=cd1)
btn2 = types.InlineKeyboardButton(text='Delayed publication',
                                      callback_data=cd2)
markup.add(btn1, btn2)

bot.edit_message_reply_markup(message.chat.id, msg.message_id, reply_markup=markup)

但是 file_id 的大小,我得到的是

new_file_id = msg.video_note.file_id

https://github.com/eternnoir/pyTelegramBotAPI的标准方法) 超过允许的 callback_data 大小(1-64 字节)。

callback_data 的字符串的实际大小是 cd1 为 128 字节,cd2 为 132 字节。

file_id 看起来像 DQACAgIAAxkDAAIHZ14-nxWa7ckt2ZG7UQMrq_PuxIxRAAK4BQACzfj4SdBn7Y70cYWSGAQ,大小为 120 字节。

有什么想法吗?真的希望得到您的帮助。

【问题讨论】:

  • 第一个想法是存储在像id-telegram_file_id这样的数据库对中,所以id的大小会更小(最多32字节)。但这看起来不是好的(美容)解决方案。

标签: python telegram telegram-bot py-telegram-bot-api


【解决方案1】:

我遇到了同样的问题,似乎无法在回调数据中发送file_id

如果您从发送到您的机器人的消息中获取file_id,则可以使用message_id 来解决此问题,它是用于识别聊天中消息的渐进式索引。

不幸的是,Telegram API 没有一种方法可以让您恢复具有其 id 的过去消息,但是当您收到消息时,您可以存储映射 message_id -> file_id(在内存或数据库中)并传递密钥作为回调数据。

当然这不是世界上最好的东西,但我认为这是我们可以拥有的最好的东西,直到他们增加 callback_data 的大小。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    相关资源
    最近更新 更多