我有一个项目列表,我随机选择一个项目并将其发送给用户。然后,我在短信正下方有一个内联按钮,可以再次对项目列表进行随机播放。
像这样:
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包装器。
答案 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()