]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - rbot/plugins/seen.rb
initial import of rbot
[user/henk/code/ruby/rbot.git] / rbot / plugins / seen.rb
1 Saw = Struct.new("Saw", :nick, :time, :type, :where, :message)
2
3 class SeenPlugin < Plugin
4   def help(plugin, topic="")
5     "seen <nick> => have you seen, or when did you last see <nick>"
6   end
7   
8   def privmsg(m)
9     unless(m.params =~ /^(\S)+$/)
10       m.reply "incorrect usage: " + help(m.plugin)
11       return
12     end
13
14     m.params.gsub!(/\?$/, "")
15
16     if @registry.has_key?(m.params)
17       m.reply seen(@registry[m.params])
18     else
19       m.reply "nope!"
20     end
21   end
22
23   def listen(m)
24     # keep database up to date with who last said what
25     if m.kind_of?(PrivMessage)
26       return if m.private? || m.address?
27       if m.action?
28         @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "ACTION", 
29                                           m.target, m.message.dup)
30       else
31         @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PUBLIC",
32                                           m.target, m.message.dup)
33       end
34     elsif m.kind_of?(QuitMessage)
35       return if m.address?
36       @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "QUIT", 
37                                         nil, m.message.dup)
38     elsif m.kind_of?(NickMessage)
39       return if m.address?
40       @registry[m.message] = Saw.new(m.sourcenick.dup, Time.new, "NICK", 
41                                         nil, m.message.dup)
42       @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "NICK", 
43                                         nil, m.message.dup)
44     elsif m.kind_of?(PartMessage)
45       return if m.address?
46       @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "PART", 
47                                         m.target, m.message.dup)
48     elsif m.kind_of?(JoinMessage)
49       return if m.address?
50       @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "JOIN", 
51                                         m.target, m.message.dup)
52     elsif m.kind_of?(TopicMessage)
53       return if m.address?
54       @registry[m.sourcenick] = Saw.new(m.sourcenick.dup, Time.new, "TOPIC", 
55                                         m.target, m.message.dup)
56     end
57   end
58   
59   def seen(saw)
60     ret = "#{saw.nick} was last seen "
61     ago = Time.new - saw.time
62     
63     if (ago.to_i == 0)
64       ret += "just now, "
65     else
66       ret += Utils.secs_to_string(ago) + " ago, "
67     end
68
69     case saw.type
70     when "PUBLIC"
71       ret += "saying #{saw.message}"
72     when "ACTION"
73       ret += "doing #{saw.nick} #{saw.message}"
74     when "NICK"
75       ret += "changing nick from #{saw.nick} to #{saw.message}"
76     when "PART"
77       ret += "leaving #{saw.where}"
78     when "JOIN"
79       ret += "joining #{saw.where}"
80     when "QUIT"
81       ret += "quiting IRC (#{saw.message})"
82     when "TOPIC"
83       ret += "changing the topic of #{saw.where} to #{saw.message}"
84     end
85   end
86   
87 end
88 plugin = SeenPlugin.new
89 plugin.register("seen")