主要是试图检查我想要做什么是可能的,因为我一直在努力在网上找到任何类似的例子。
我正在尝试使用hubot的框架创建一系列菜单,以便不必记住单个命令和值。相反,您只需在开头输入一个命令,在存储这些值之后提供相关信息,以便在菜单后面多次使用。
这样的事情:
robot.hear /blah/i, id:'start', (msg) ->
currentPosition = 'start'
msg.send "Please select an Option"
selectOption msg
selectOption = (msg) ->
currentPosition = 'selectOption'
msg.send "Option 1"
msg.send "Option 2"
robot.hear /(.*)/i, id:'selectOption', (msg) ->
displayOption1 msg if msg.match is '1'
displayOption2 msg if msg.match is '2'
displayOption1 = (msg) ->
currentPosition = 'displayOption1'
msg.send "Please enter some information"
robot.hear /(.*)/i, id: 'displayOption1', (msg) ->
# if information is entered do something with information
# pass the information onto another method etc...
# ....
# methods to do something with information and feedback results
# ....
# ....
# methods corresponding to option 2
# ....
# ....
# methods to do something with information and feedback results
# ....
end = (msg) ->
currentPosition = 'none'
msg.send "Thank you for using our service"
我一直在使用监听器中间件来确保您无法访问菜单中的顺序:
robot.listenerMiddleware (context, next, done) ->
listenerID = context.listener.options?.id
return unless listenerID?
try
if listenerID is 'start'
if currentPosition is 'none'
next()
else
done()
if listenerID is 'selectOption'
if currentPosition is 'selectOption'
next()
# etc...
# Other similar examples to above for every "menu" ...
catch err
robot.emit ('error', err, context.response)
当我第一次浏览菜单时,一切似乎都按预期工作,但是如果我尝试从头开始第二次启动问题就会出现问题。即使我在方法的开头或结尾将它们设置为null,值似乎也会被记住。当我接近结束时,它将开始打印两次。
我认为这是因为值被缓存/存储在别处,我需要重置它。我还假设它打印两次的原因是因为hubot记得我已经通过菜单一次,并且有两个实例同时运行(如果我第三次进行,它将开始打印三次)。然而,它似乎只是在最后这样做,并将按照预期的方式打印出前几种方法。
简单地说,是否有一种方法可以让hubot在'end'方法中忘记所有内容,以便它像我每次第一次运行它一样运行?我已经研究过了,但是像robot.shutdown这样的东西似乎不起作用。
如果无法解决上述问题,是否有解决方法?
编辑:如果它有帮助,我正在尝试制作类似于botkit的会话功能:https://github.com/howdyai/botkit#multi-message-replies-to-incoming-messages
答案 0 :(得分:1)
我在github的帖子上链接到这个问题同样问题:
https://github.com/lmarkus/hubot-conversation
目前正在尝试查看它是否解决了我遇到的问题,如果不希望这会帮助其他人遇到类似问题。