python - 如何使 Telegram 中的 InlineKeyboardButton 触发命令?
问题描述
我想InlineKeyboardButton
在我的 python 电报机器人中使用一个来触发next
命令。我试图从这个答案中汲取灵感,但我一定遗漏了一些东西。事实上,当我点击对话中的“下一步”按钮时,我收到以下错误消息:AttributeError: 'NoneType' object has no attribute 'reply_text'
. 意料之中的“往前走,那就好!” 消息未显示在对话中。
如何通过单击按钮修复我的代码以正确启动命令,同时又不会失去/next
在聊天中调用命令的能力?
def start(update, context):
context.user_data["step"] = 0 # Initialize step counter
update.message.reply_text(
f"Hello, you're starting at step {context.user_data['step']}.",
reply_markup=menu_keyboard(),
)
def next(update, context):
context.user_data["step"] += 1
update.message.reply_text("Going forward!")
update.message.reply_text(
f"We're now at step {context.user_data['step']}.", reply_markup=menu_keyboard()
)
def menu_keyboard():
keyboard = [[InlineKeyboardButton("➡️ Next", callback_data="next")]]
return InlineKeyboardMarkup(keyboard)
def button(update, context):
query = update.callback_query
query.answer()
if query.data == "next":
next(update, context)
def main():
updater = Updater("TOKEN", use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("next", next))
dp.add_handler(CallbackQueryHandler(button))
updater.start_polling()
updater.idle()
解决方案
我发现你的错误不是 update.callback_query 你必须使用 update.effective_message
这是您的更新代码!!!
def start(update, context):
context.user_data["step"] = 0 # Initialize step counter
update.message.reply_text(
f"Hello, you're starting at step {context.user_data['step']}.",
reply_markup=menu_keyboard(),
)
def next(update, context):
context.user_data["step"] += 1
update.message.reply_text("Going forward!")
update.message.reply_text(
f"We're now at step {context.user_data['step']}.", reply_markup=menu_keyboard()
)
def menu_keyboard():
keyboard = [[InlineKeyboardButton("➡️ Next", callback_data="next")]]
return InlineKeyboardMarkup(keyboard)
def button(update, context):
query = update.effective_message
query.answer()
if query.data == "next":
next(update, context)
def main():
updater = Updater("TOKEN", use_context=True)
dp = updater.dispatcher
dp.add_handler(CommandHandler("start", start))
dp.add_handler(CommandHandler("next", next))
dp.add_handler(CallbackQueryHandler(button))
updater.start_polling()
updater.idle()
如果您在这方面有任何其他问题,请告诉我!
我的电报 ID 是 telegram.me/rohithaditya
在 git 上关注我 - rohith-sreedharan
推荐阅读
- django - 为什么我的模板标签出现过滤器错误?
- spring-boot - 在springboot中使用ignite缓存
- linux - 我什么时候应该在 linux 中调用 res_init?
- react-native - 我的 React Native 应用程序在我的设备上占用了可笑的空间
- java - 使用枚举的工厂
- javascript - setState 不设置状态
- azure - Jenkins 管道 - 在 ansible 和 Terraform 中引用 SSH Keys
- r - if_else 与have_labelled 列失败,因为错误的类
- javascript - 如何摆脱 v-on 处理程序中的错误:“TypeError:_vm.myFcn 不是函数”?
- javascript - 当我从下拉按钮中选择一个值时,其他值也会出现