1 Saw = Struct.new("Saw", :nick, :time, :type, :where, :message)
3 class SeenPlugin < Plugin
4 def help(plugin, topic="")
5 "seen <nick> => have you seen, or when did you last see <nick>"
9 unless(m.params =~ /^(\S)+$/)
10 m.reply "incorrect usage: " + help(m.plugin)
14 m.params.gsub!(/\?$/, "")
16 if @registry.has_key?(m.params)
17 m.reply seen(@registry[m.params])
24 # keep database up to date with who last said what
25 if m.kind_of?(PrivMessage)
26 return if m.private? || m.address?
28 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "ACTION",
29 m.target, m.message.dup)
31 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PUBLIC",
32 m.target, m.message.dup)
34 elsif m.kind_of?(QuitMessage)
36 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "QUIT",
38 elsif m.kind_of?(NickMessage)
40 @registry[m.message] = Saw.new(m.sourcenick.dup, Time.new, "NICK",
42 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "NICK",
44 elsif m.kind_of?(PartMessage)
46 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PART",
47 m.target, m.message.dup)
48 elsif m.kind_of?(JoinMessage)
50 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN",
51 m.target, m.message.dup)
52 elsif m.kind_of?(TopicMessage)
54 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC",
55 m.target, m.message.dup)
60 ret = "#{saw.nick} was last seen "
61 ago = Time.new - saw.time
66 ret += Utils.secs_to_string(ago) + " ago, "
71 ret += "saying #{saw.message}"
73 ret += "doing #{saw.nick} #{saw.message}"
75 ret += "changing nick from #{saw.nick} to #{saw.message}"
77 ret += "leaving #{saw.where}"
79 ret += "joining #{saw.where}"
81 ret += "quiting IRC (#{saw.message})"
83 ret += "changing the topic of #{saw.where} to #{saw.message}"
88 plugin = SeenPlugin.new
89 plugin.register("seen")