0

我需要一个命令来询问用户问题,并在 pm 中记录他们的响应,但我不确定如何在 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

等等。我被困在如何做到这一点上,如果有的话。

4

1 回答 1

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虽然您当然可以通过为下一个键/值对设置每个设置提示来链接您的提示,但您可以通过使用可以按任意顺序处理的异步命令列表来响应您自己和您的用户的生活。

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

于 2015-06-29T01:29:22.770 回答