summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2011-06-09 12:29:07 +0200
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2011-06-09 12:29:07 +0200
commit1fbb090ea91ab20916b3698d8afd6e300673b826 (patch)
treefb2bd1c08f75db78cca75c782ce52e32c10fb4c5
parentc5bd13b7ccad6832b75e2a185169d3822c3cc4ef (diff)
Mark threaded mapped messages as replied
This prevents them from being delegated to unreplied() before the processing thread has the chance to mark it replied. The solution would fail for threaded messages whose processing would not reply, but I'm not aware of such a method currently exists. A future design of the message delegation and mapping could thread the actual delegation instead, and this problem would be solved.
-rw-r--r--lib/rbot/messagemapper.rb6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/rbot/messagemapper.rb b/lib/rbot/messagemapper.rb
index c222ee71..d85f0b14 100644
--- a/lib/rbot/messagemapper.rb
+++ b/lib/rbot/messagemapper.rb
@@ -259,6 +259,12 @@ class Bot
if m.bot.auth.allow?(auth, m.source, m.replyto)
debug "template match found and auth'd: #{action.inspect} #{options.inspect}"
if !m.in_thread && (tmpl.options[:thread] || tmpl.options[:threaded])
+ # since the message action is in a separate thread, the message may be
+ # delegated to unreplied() before the thread has a chance to actually
+ # mark it as replied. since threading is used mostly for commands that
+ # are known to take some processing time (e.g. download a web page) before
+ # giving an output, we just mark these as 'replied' here
+ m.replied = true
Thread.new do
begin
@parent.send(action, m, options)