1

我需要像这样在回调数据中重新发送文件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 字节。

有任何想法吗?真的希望得到你的帮助。

4

1 回答 1

1

我遇到了同样的问题,看起来无法file_id在回调数据中发送 a 。

如果您file_id要从发送到您的机器人的消息中获取,则可以使用一种解决方法,message_id它是一个渐进式索引,用于识别聊天中的消息。

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

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

于 2020-04-10T10:03:31.227 回答