X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=data%2Frbot%2Fplugins%2Fseen.rb;h=529fdf8695f3d3125c858f13c6400e601040d3bb;hb=16336b4a240a4265d1f2df1e30d7b68d3a924287;hp=1a1681fb17861905e13f9d17955ffd01dabdaeaf;hpb=4e4a5b8a91b3a5737773aab0ed7e67180f01a982;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/data/rbot/plugins/seen.rb b/data/rbot/plugins/seen.rb index 1a1681fb..529fdf86 100644 --- a/data/rbot/plugins/seen.rb +++ b/data/rbot/plugins/seen.rb @@ -49,33 +49,38 @@ class SeenPlugin < Plugin when PrivMessage return if m.private? type = m.action? ? 'ACTION' : 'PUBLIC' - @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, now, type, - m.target.to_s, m.message.dup) + store m, Saw.new(m.sourcenick.dup, now, type, + m.target.to_s, m.message.dup) when QuitMessage return if m.address? - @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, now, "QUIT", - nil, m.message.dup) + store m, Saw.new(m.sourcenick.dup, now, "QUIT", + nil, m.message.dup) when NickMessage return if m.address? - saw = Saw.new(m.oldnick, now, "NICK", nil, m.newnick) - @registry[m.oldnick] = saw - @registry[m.newnick] = saw + store m, Saw.new(m.oldnick, now, "NICK", nil, m.newnick) when PartMessage return if m.address? - @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PART", - m.target.to_s, m.message.dup) + store m, Saw.new(m.sourcenick.dup, Time.new, "PART", + m.target.to_s, m.message.dup) when JoinMessage return if m.address? - @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN", - m.target.to_s, m.message.dup) + store m, Saw.new(m.sourcenick.dup, Time.new, "JOIN", + m.target.to_s, m.message.dup) when TopicMessage return if m.address? or m.info_or_set == :info - @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC", - m.target.to_s, m.message.dup) + store m, Saw.new(m.sourcenick.dup, Time.new, "TOPIC", + m.target.to_s, m.message.dup) end end - def seen(saw) + def seen(reg) + saw = case reg + when Struct::Saw + reg # for backwards compatibility + when Array + reg.last + end + ret = "#{saw.nick} was last seen " ago = Time.new - saw.time @@ -87,22 +92,68 @@ class SeenPlugin < Plugin case saw.type.to_sym when :PUBLIC - ret << "saying #{saw.message}" + ret << "saying \"#{saw.message}\"" when :ACTION ret << "doing #{saw.nick} #{saw.message}" when :NICK ret << "changing nick from #{saw.nick} to #{saw.message}" when :PART ret << "leaving #{saw.where}" + ret << " (#{saw.message})" unless saw.message.empty? when :JOIN ret << "joining #{saw.where}" when :QUIT ret << "quitting IRC (#{saw.message})" when :TOPIC - ret << "changing the topic of #{saw.where} to #{saw.message}" + ret << "changing the topic of #{saw.where} to \"#{saw.message}\"" + end + + case saw.type.to_sym + when :PART, :QUIT + before = reg.first + if before.type == "PUBLIC" || before.type == "ACTION" + time_diff = saw.time - before.time + if time_diff < 300 + time = "a moment" + elsif time_diff < 3600 + time = "a while" + else + return ret + end + + ret << ' and %{time} before' % { :time => time } + + if before.type == "PUBLIC" + ret << ' saying "%{message}"' % { + :message => before.message + } + elsif before.type == "ACTION" + ret << ' doing *%{message}*' % { + :nick => saw.nick, + :message => before.message + } + end + end end + return ret end + def store(m, saw) + reg = @registry[saw.nick] + + if reg && reg.is_a?(Array) + reg.shift if reg.size > 1 + reg.push(saw) + else + reg = [saw] + end + + if m.is_a? NickMessage + @registry[m.newnick] = reg + end + + @registry[saw.nick] = reg + end end plugin = SeenPlugin.new plugin.register("seen")