]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/commitdiff
Mark threaded mapped messages as replied
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Thu, 9 Jun 2011 10:29:07 +0000 (12:29 +0200)
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>
Thu, 9 Jun 2011 10:29:07 +0000 (12:29 +0200)
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.

lib/rbot/messagemapper.rb

index c222ee71350066e943c25a65f94cf5f745a04b50..d85f0b14aa69e448bfdddff2e2193e594a71cea4 100644 (file)
@@ -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)