diff options
author | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-07-27 16:32:32 +0000 |
---|---|---|
committer | Tom Gilbert <tom@linuxbrit.co.uk> | 2005-07-27 16:32:32 +0000 |
commit | 2a96c9198c1f6e13407d0999083f6ce5e0bc06fa (patch) | |
tree | b3b9247d275d9b554665bc22884104d266d2e757 /lib/rbot/plugins/seen.rb | |
parent | 21949774b91eaec6ecde4eaa8ad121e2c0a36b87 (diff) |
move rbot into lib - still rearranging for packaging/installation
Diffstat (limited to 'lib/rbot/plugins/seen.rb')
-rw-r--r-- | lib/rbot/plugins/seen.rb | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/lib/rbot/plugins/seen.rb b/lib/rbot/plugins/seen.rb new file mode 100644 index 00000000..6bd86a70 --- /dev/null +++ b/lib/rbot/plugins/seen.rb @@ -0,0 +1,89 @@ +Saw = Struct.new("Saw", :nick, :time, :type, :where, :message) + +class SeenPlugin < Plugin + def help(plugin, topic="") + "seen <nick> => have you seen, or when did you last see <nick>" + end + + def privmsg(m) + unless(m.params =~ /^(\S)+$/) + m.reply "incorrect usage: " + help(m.plugin) + return + end + + m.params.gsub!(/\?$/, "") + + if @registry.has_key?(m.params) + m.reply seen(@registry[m.params]) + else + m.reply "nope!" + end + end + + def listen(m) + # keep database up to date with who last said what + if m.kind_of?(PrivMessage) + return if m.private? || m.address? + if m.action? + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "ACTION", + m.target, m.message.dup) + else + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PUBLIC", + m.target, m.message.dup) + end + elsif m.kind_of?(QuitMessage) + return if m.address? + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "QUIT", + nil, m.message.dup) + elsif m.kind_of?(NickMessage) + return if m.address? + @registry[m.message] = Saw.new(m.sourcenick.dup, Time.new, "NICK", + nil, m.message.dup) + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "NICK", + nil, m.message.dup) + elsif m.kind_of?(PartMessage) + return if m.address? + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PART", + m.target, m.message.dup) + elsif m.kind_of?(JoinMessage) + return if m.address? + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN", + m.target, m.message.dup) + elsif m.kind_of?(TopicMessage) + return if m.address? + @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC", + m.target, m.message.dup) + end + end + + def seen(saw) + ret = "#{saw.nick} was last seen " + ago = Time.new - saw.time + + if (ago.to_i == 0) + ret += "just now, " + else + ret += Utils.secs_to_string(ago) + " ago, " + end + + case saw.type + when "PUBLIC" + 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}" + when "JOIN" + ret += "joining #{saw.where}" + when "QUIT" + ret += "quiting IRC (#{saw.message})" + when "TOPIC" + ret += "changing the topic of #{saw.where} to #{saw.message}" + end + end + +end +plugin = SeenPlugin.new +plugin.register("seen") |