Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python电报机器人:InlineKeyboard按钮并等待用户输入_Python_Telegram Bot_Telepot - Fatal编程技术网

Python电报机器人:InlineKeyboard按钮并等待用户输入

Python电报机器人:InlineKeyboard按钮并等待用户输入,python,telegram-bot,telepot,Python,Telegram Bot,Telepot,我正在尝试制作一个电报机器人,它将与我正在开发的物联网系统接口。实际上,我一直在为python电报机器人编程;她是我的问题:在机器人的聊天中,用户可以调用InlineKeyboard按钮来打开/关闭灯或设置计时器。当用户选择timer buttone时,我想打开另一个InlineKeyboardButtons,让用户选择其他参数,但使用我当前的代码,我无法做到这一点,因为代码跳转到回调处理程序。有什么建议吗? 我将发布整个代码: 从MyMQTT导入* 导入时间 从datetime导入dateti

我正在尝试制作一个电报机器人,它将与我正在开发的物联网系统接口。实际上,我一直在为python电报机器人编程;她是我的问题:在机器人的聊天中,用户可以调用InlineKeyboard按钮来打开/关闭灯或设置计时器。当用户选择timer buttone时,我想打开另一个InlineKeyboardButtons,让用户选择其他参数,但使用我当前的代码,我无法做到这一点,因为代码跳转到回调处理程序。有什么建议吗? 我将发布整个代码:

从MyMQTT导入* 导入时间 从datetime导入datetime,timedelta 导入json 导入请求 随机输入 进口电传机 从telepot.loop导入MessageLoop 从telepot.namedtuple导入InlineKeyboardMarkup、InlineKeyboardButton、ReplyKeyboardMarkup 测试=1 类tg_pubobject: def _uinit _; self、客户端ID、代理、端口、主题: self.clientID=clientID self.topic=strtopic self.topic='/'.join[self.topic] self.client=MyMQTTclientID,代理,端口,self self.\u消息={ bn:电报机器人, ip:, e:[ { n:lights_命令, u:布尔, t:2021-04-15 16:59:12.586822, v:在 }, { n:U命令, u:布尔, t:2021-04-15 16:59:12.586822, v:关 } ] } def sendDataself,主题,输出: 信息=自我信息 消息['e'][0]['v']=输出 消息['e'][0]['t']=strdatetime.now self.client.myPublishtopic,消息 def startself: self.client.start def stopself: 自动停止 教室: def _init__self、令牌、代理、端口、主题: 机器人令牌将保存在目录中!!!! self.tokenBot=令牌本地令牌 self.tokenBot=请求。gethttp://catalogIP/telegram_token.json[电报令牌]目录令牌 self.bot=telepot.Botself.tokenBot self.client=MyMQTTtelegramBot、代理、端口、无作为发布者 self.client.start self.topic=主题 自我信息={ bn:电报机器人, ip:, e:[ { n:lights_命令, u:布尔, t:2021-04-15 16:59:12.586822, v:在 }, { n:U命令, u:布尔, t:2021-04-15 16:59:12.586822, v:关 } ] } 使用消息 MessageLoopself.bot,{'chat':self.on\u chat\u message}。作为线程运行 使用按钮->查询回调 MessageLoopself.bot,{'chat':self.on\u chat\u message,'callback\u query':self.on\u callback\u query}。作为\u线程运行 def sendMessageself,主题: 信息=自我信息 消息['e'][0]['v']=random.randint0,1 0=未检测到任何移动 消息['e'][0]['t']=strdatetime.now self.client.myPublishtopic,消息 def启动自我: self.client.start def自动停止: 自动停止 处理信息 聊天信息中的def,消息: 内容类型,聊天类型,聊天ID=telepot.msg message=msg['text']从json中的键“text”检索消息 使用消息 如果消息==/打开灯: 有效载荷=自身。\uuuu message.copy 有效负载['e'][0]['v']=on 有效负载['e'][0]['t']=strdatetime.now self.client.myPublishself.topic,payload self.bot.sendMessagechat_ID,text=灯已打开 其他: self.bot.sendMessagechat_ID,text=不支持命令 使用按钮 如果消息==/开始: self.bot.sendMessagechat_ID,text=欢迎,我是HioTel。请按其中一个可用按钮开始。 键盘=ReplyKeyboardMarkupkeyboard=[['灯','加热器'],['状态信息']] self.bot.sendMessagechat\u ID,text='Welcome,我是HioTel。请按其中一个可用按钮开始。“,回复\u markup=keyboard elif消息==灯: 按钮矩阵 键盘=内嵌键盘标记内嵌键盘=[ [
InlineKeyboardButtontext=f'灯亮这是正确的,因为按下InlineKeyboardButtons中的任何按钮都会触发负责处理响应的回调处理程序

一种选择是重构 例如,创建发送给定响应的方法的ur代码

def发送光通信ID: 键盘=内嵌键盘标记内嵌键盘=[ [ InlineKeyboardButtontext=f'加热打开