6 # Keep a database of who last said/did what
8 define_structure :Saw, :nick, :time, :type, :where, :message
10 class SeenPlugin < Plugin
11 def help(plugin, topic="")
12 "seen <nick> => have you seen, or when did you last see <nick>"
16 unless(m.params =~ /^(\S)+$/)
17 m.reply "incorrect usage: " + help(m.plugin)
21 m.params.gsub!(/\?$/, "")
23 if @registry.has_key?(m.params)
24 m.reply seen(@registry[m.params])
31 return unless m.source
32 # keep database up to date with who last said what
37 type = m.action? ? 'ACTION' : 'PUBLIC'
38 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, now, type,
39 m.target.to_s, m.message.dup)
42 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, now, "QUIT",
46 saw = Saw.new(m.oldnick, now, "NICK", nil, m.newnick)
47 @registry[m.oldnick] = saw
48 @registry[m.newnick] = saw
51 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PART",
52 m.target.to_s, m.message.dup)
55 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN",
56 m.target.to_s, m.message.dup)
59 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC",
60 m.target.to_s, m.message.dup)
65 ret = "#{saw.nick} was last seen "
66 ago = Time.new - saw.time
71 ret << Utils.secs_to_string(ago) + " ago, "
76 ret << "saying #{saw.message}"
78 ret << "doing #{saw.nick} #{saw.message}"
80 ret << "changing nick from #{saw.nick} to #{saw.message}"
82 ret << "leaving #{saw.where}"
84 ret << "joining #{saw.where}"
86 ret << "quitting IRC (#{saw.message})"
88 ret << "changing the topic of #{saw.where} to #{saw.message}"
93 plugin = SeenPlugin.new
94 plugin.register("seen")