1 Saw = Struct.new("Saw", :nick, :time, :type, :where, :message)
3 class SeenPlugin < Plugin
4 # turn a number of seconds into a human readable string, e.g
5 # 2 days, 3 hours, 18 minutes, 10 seconds
6 def secs_to_string(secs)
8 days = (secs / (60 * 60 * 24)).to_i
9 secs = secs % (60 * 60 * 24)
10 hours = (secs / (60 * 60)).to_i
11 secs = (secs % (60 * 60))
12 mins = (secs / 60).to_i
13 secs = (secs % 60).to_i
14 ret += "#{days} days, " if days > 0
15 ret += "#{hours} hours, " if hours > 0 || days > 0
16 ret += "#{mins} minutes and " if mins > 0 || hours > 0 || days > 0
17 ret += "#{secs} seconds"
21 def help(plugin, topic="")
22 "seen <nick> => have you seen, or when did you last see <nick>"
26 unless(m.params =~ /^(\S)+$/)
27 m.reply "incorrect usage: " + help(m.plugin)
31 m.params.gsub!(/\?$/, "")
33 if @registry.has_key?(m.params)
34 m.reply seen(@registry[m.params])
41 # keep database up to date with who last said what
42 if m.kind_of?(PrivMessage)
45 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "ACTION",
46 m.target, m.message.dup)
48 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PUBLIC",
49 m.target, m.message.dup)
51 elsif m.kind_of?(QuitMessage)
53 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "QUIT",
55 elsif m.kind_of?(NickMessage)
57 @registry[m.message] = Saw.new(m.sourcenick.dup, Time.new, "NICK",
59 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "NICK",
61 elsif m.kind_of?(PartMessage)
63 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PART",
64 m.target, m.message.dup)
65 elsif m.kind_of?(JoinMessage)
67 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN",
68 m.target, m.message.dup)
69 elsif m.kind_of?(TopicMessage)
71 @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC",
72 m.target, m.message.dup)
77 ret = "#{saw.nick} was last seen "
78 ago = Time.new - saw.time
83 ret += secs_to_string(ago) + " ago, "
88 ret += "saying #{saw.message}"
90 ret += "doing #{saw.nick} #{saw.message}"
92 ret += "changing nick from #{saw.nick} to #{saw.message}"
94 ret += "leaving #{saw.where}"
96 ret += "joining #{saw.where}"
98 ret += "quiting IRC (#{saw.message})"
100 ret += "changing the topic of #{saw.where} to #{saw.message}"
105 plugin = SeenPlugin.new
106 plugin.register("seen")