尝试编辑电报消息时出错

时间:2018-04-08 16:28:40

标签: python-3.x telegram-bot

我有一个项目列表,我随机选择一个项目并将其发送给用户。然后,我在短信正下方有一个内联按钮,可以再次对项目列表进行随机播放。

像这样:

keyboard = types.InlineKeyboardMarkup()
shuffle_button = types.InlineKeyboardButton(text='Shuffle Again', callback_data='shuffle_action')
keyboard.add(shuffle_button)

@bot.message_handler(commands=['shuffle'])
def display_shuffle(message):
    cid = message.chat.id
    bot.send_message(cid, random_song(), reply_markup=keyboard, parse_mode='HTML')

然后我做了一个回调查询处理程序,如果用户请求再次随机化它,它会更改已发送消息的内容:

@bot.callback_query_handler(func=lambda c: c.data == 'next_action')
def shuffle_more(call):
    cid = call.message.chat.id
    mid = call.message.message_id

    bot.edit_message_text(chat_id=cid, message_id=mid, text=random_song(), reply_markup=keyboard)

我遇到的一个巨大问题是,有时候我用来混淆列表的random_song()函数会随机返回与我上一次显示的完全相同的消息。由于您无法将消息编辑为同一消息,因此出现错误。

如何更改我的代码,以免发生这种情况? 附:我在py3中使用了pyTelegramBotAPI包装器。

2 个答案:

答案 0 :(得分:1)

CallbackQuery包含当前Message,因此包含当前文字的字段text

您应该能够使用call.message.text阅读当前文字并调整random_song()以确保它不相同。

答案 1 :(得分:0)

这不是我提出的最优雅的解决方案,但它有效:

chosen_song = random_song()

while True:
    try:
        bot.edit_message_text(cid, mid, chosen_song)
    except:
        chosen_song = random_song()