我需要有一个命令来询问用户问题,并在 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
等。我被困在如何做到这一点上,如果有的话。
为每个
设置使用唯一的前缀
因为 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, /^!ages+(d+)/ do |m|
m.reply "Age: #{$1}"
end
on :message, /^!locs+(.*)/ do |m|
m.reply "Location: #{$1.strip}"
end
虽然您当然可以通过使每个设置提示下一个键/值对来链接提示,但通过使用可以按任何顺序处理的异步命令列表来响应!setup
,您将使自己和用户的生活更轻松。
您仍然必须确保每个事件都以线程安全的方式写入集合,并在某个时候序列化集合。与此同时,这绝对应该让你朝着正确的方向前进。