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