hubot有没有类似feature/workaround的botkit的对话功能? (让 hubot 忘记回复)
Does hubot have a similar feature/workaround to botkit's conversation feature? (& making hubot forget responses)
主要是想检查我正在尝试做的事情是否可行,因为我很难在网上找到任何类似的例子。
我正在尝试使用 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,值似乎也会被记住。当我接近尾声时,它会开始打印两次。
我认为这是因为值在其他地方变得 cached/stored,我需要重新设置它。我还假设它打印两次的原因是因为 hubot 记得我已经通过菜单一次并且一次有两个实例 运行 (如果我第三次通过它会开始打印三次) .然而,它似乎只是在最后才这样做,并且会按预期打印出前几种方法。
简单地说,有没有办法让 hubot 忘记可能在 'end' 方法中的所有内容,这样它每次都像我第一次 运行 一样运行?我已经调查过了,但是 robot.shutdown 之类的东西似乎不起作用。
如果以上方法不可行,是否有解决方法?
编辑:如果有帮助,我正在尝试制作类似于 botkit 的对话功能的东西:https://github.com/howdyai/botkit#multi-message-replies-to-incoming-messages
我在 github 上的线程上得到了这个链接,问同样的问题:
https://github.com/lmarkus/hubot-conversation
目前正在尝试看看它是否能解决我遇到的问题,如果不能,希望它能帮助其他遇到与我类似问题的人。
主要是想检查我正在尝试做的事情是否可行,因为我很难在网上找到任何类似的例子。
我正在尝试使用 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,值似乎也会被记住。当我接近尾声时,它会开始打印两次。
我认为这是因为值在其他地方变得 cached/stored,我需要重新设置它。我还假设它打印两次的原因是因为 hubot 记得我已经通过菜单一次并且一次有两个实例 运行 (如果我第三次通过它会开始打印三次) .然而,它似乎只是在最后才这样做,并且会按预期打印出前几种方法。
简单地说,有没有办法让 hubot 忘记可能在 'end' 方法中的所有内容,这样它每次都像我第一次 运行 一样运行?我已经调查过了,但是 robot.shutdown 之类的东西似乎不起作用。
如果以上方法不可行,是否有解决方法?
编辑:如果有帮助,我正在尝试制作类似于 botkit 的对话功能的东西:https://github.com/howdyai/botkit#multi-message-replies-to-incoming-messages
我在 github 上的线程上得到了这个链接,问同样的问题:
https://github.com/lmarkus/hubot-conversation
目前正在尝试看看它是否能解决我遇到的问题,如果不能,希望它能帮助其他遇到与我类似问题的人。