在基于cinch的机器人中基于状态的命令

时间:2015-04-20 20:51:00

标签: ruby irc cinch

我需要有一个命令,询问用户的问题,并在下午记录他们的响应,但我不确定如何通过基于线程的命令在cinch上做到这一点。 像这样的东西

!profile create
Bot: Please tell me your age
27
Bot: Thank you. Please tell me your gender.
Female
Bot: Okay. Please tell me your location. Where do you live?
Somewhere

等。如果可以的话,我会坚持如何做到这一点。

1 个答案:

答案 0 :(得分:0)

为每个设置使用唯一前缀

因为Cinch是线程化的,所以最简单的方法就是使你的键/值对是幂等的。例如,运行!setup可以提示用户输入前缀值,每个值都作为单独的事件处理,而不是链接在一起。请考虑以下事项:

# Reply to `!setup` with list of async prefixes.
on :message, /^!setup/ do |m|
  m.reply "Set age with '!age'"
  m.reply "Set location with '!loc'"
end

on :message, /^!age\s+(\d+)/ do |m|
  m.reply "Age: #{$1}"
end

on :message, /^!loc\s+(.*)/ do |m|
  m.reply "Location: #{$1.strip}"
end

虽然您可以通过为下一个键/值对设置每个提示来链接您的提示,但通过使用异步命令列表响应!setup,您将使自己和用户的生活更轻松可以按任何顺序处理。

您仍然必须确保每个事件以线程安全的方式写入集合,并且您在某个时刻序列化集合。与此同时,这绝对应该让你朝着正确的方向前进。