使用回调查询使用内联键盘更新消息
Updating messages with inline keyboards using callback queries
我想在使用内联键盘的聊天中更新消息,但不明白如何接收 inline_message_id 或者如果它仅用于内联查询我该如何确定chat_id 和 message_id 用于 class editMessageText(*args, **kwargs) ]telegram.bot.Bot?
我的代码示例(部分):
#!/usr/bin/python
import telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, InlineQueryHandler, CallbackQueryHandler
tokenid = "YOUR_TOKEN_ID"
def inl(bot, update):
if update.callback_query.data == "k_light_on":
#func for turn on light res = k_light.on()
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text="Turning on light ON!")
bot.editMessageText(inline_message_id=update.callback_query.inline_message_id, text="Do you want to turn On or Off light? Light is ON")
#hardcoded vars variant
#bot.editMessageText(message_id=298, chat_id=174554240, text="Do you want to turn On or Off light? Light is ON")
elif update.callback_query.data == "k_light_off":
#func for turn on light res = k_light.off()
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text="Turning off light OFF!")
bot.editMessageText(inline_message_id=update.callback_query.inline_message_id, text="Do you want to turn On or Off light? Light is ON")
#hardcoded vars variant
#bot.editMessageText(message_id=298, chat_id=174554240, text="Do you want to turn On or Off light? Light is OFF")
else:
print "Err"
def k_light_h(bot, update):
reply_markup = telegram.InlineKeyboardMarkup([[telegram.InlineKeyboardButton("On", callback_data="k_light_on"), telegram.InlineKeyboardButton("Off", callback_data="k_light_off")]])
ddd = bot.sendMessage(chat_id=update.message.chat_id, text="Do you want to turn On or Off light?", reply_markup=reply_markup)
if __name__ == "__main__":
#
updater = Updater(token=tokenid)
### Handler groups
dispatcher = updater.dispatcher
# light
k_light_handler = CommandHandler('light', k_light_h)
dispatcher.add_handler(k_light_handler)
# errors
updater.dispatcher.add_error_handler(error)
updater.start_polling()
# Run the bot until the user presses Ctrl-C or the process receives SIGINT,
# SIGTERM or SIGABRT
updater.idle()
当我 运行 它时我有一个错误:
telegram.ext.dispatcher - WARNING - A TelegramError was raised while processing the Update.
root - WARNING - Update ...
... caused error "u'Bad Request: message identifier is not specified'"
我检查了 var update.callback_query.inline_message_id,它是空的。当我尝试使用硬编码变量 bot.editMessageText 和 chat_id 和 message_id 效果很好。
我是否需要保存在数据库中(对于所有用户)vars chat_id 和 message_id 当他们运行 命令 /light 然后当他们按下内联按钮时我需要从数据库中读取这个值或者我可以使用一些更简单的方法来编辑消息?
您应该将 message_id
而不是 inline_message_id
传递给 editMessageText
。
所以适合您的解决方案是:
bot.editMessageText(
message_id = update.callback_query.message.message_id,
chat_id = update.callback_query.message.chat.id,
text = "Do you want to turn On or Off light? Light is ON"
)
您随时可以这样做
try:
query.edit_message_reply_markup(reply_markup=InlineKeyboardMarkup(reply_keyboard))
except:
return
我想在使用内联键盘的聊天中更新消息,但不明白如何接收 inline_message_id 或者如果它仅用于内联查询我该如何确定chat_id 和 message_id 用于 class editMessageText(*args, **kwargs) ]telegram.bot.Bot?
我的代码示例(部分):
#!/usr/bin/python
import telegram
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, InlineQueryHandler, CallbackQueryHandler
tokenid = "YOUR_TOKEN_ID"
def inl(bot, update):
if update.callback_query.data == "k_light_on":
#func for turn on light res = k_light.on()
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text="Turning on light ON!")
bot.editMessageText(inline_message_id=update.callback_query.inline_message_id, text="Do you want to turn On or Off light? Light is ON")
#hardcoded vars variant
#bot.editMessageText(message_id=298, chat_id=174554240, text="Do you want to turn On or Off light? Light is ON")
elif update.callback_query.data == "k_light_off":
#func for turn on light res = k_light.off()
bot.answerCallbackQuery(callback_query_id=update.callback_query.id, text="Turning off light OFF!")
bot.editMessageText(inline_message_id=update.callback_query.inline_message_id, text="Do you want to turn On or Off light? Light is ON")
#hardcoded vars variant
#bot.editMessageText(message_id=298, chat_id=174554240, text="Do you want to turn On or Off light? Light is OFF")
else:
print "Err"
def k_light_h(bot, update):
reply_markup = telegram.InlineKeyboardMarkup([[telegram.InlineKeyboardButton("On", callback_data="k_light_on"), telegram.InlineKeyboardButton("Off", callback_data="k_light_off")]])
ddd = bot.sendMessage(chat_id=update.message.chat_id, text="Do you want to turn On or Off light?", reply_markup=reply_markup)
if __name__ == "__main__":
#
updater = Updater(token=tokenid)
### Handler groups
dispatcher = updater.dispatcher
# light
k_light_handler = CommandHandler('light', k_light_h)
dispatcher.add_handler(k_light_handler)
# errors
updater.dispatcher.add_error_handler(error)
updater.start_polling()
# Run the bot until the user presses Ctrl-C or the process receives SIGINT,
# SIGTERM or SIGABRT
updater.idle()
当我 运行 它时我有一个错误:
telegram.ext.dispatcher - WARNING - A TelegramError was raised while processing the Update.
root - WARNING - Update ...
... caused error "u'Bad Request: message identifier is not specified'"
我检查了 var update.callback_query.inline_message_id,它是空的。当我尝试使用硬编码变量 bot.editMessageText 和 chat_id 和 message_id 效果很好。
我是否需要保存在数据库中(对于所有用户)vars chat_id 和 message_id 当他们运行 命令 /light 然后当他们按下内联按钮时我需要从数据库中读取这个值或者我可以使用一些更简单的方法来编辑消息?
您应该将 message_id
而不是 inline_message_id
传递给 editMessageText
。
所以适合您的解决方案是:
bot.editMessageText(
message_id = update.callback_query.message.message_id,
chat_id = update.callback_query.message.chat.id,
text = "Do you want to turn On or Off light? Light is ON"
)
您随时可以这样做
try:
query.edit_message_reply_markup(reply_markup=InlineKeyboardMarkup(reply_keyboard))
except:
return