root/rbot/plugins/seen.rb @ 0f3e302547363ea237454dda891ddb5de1be4476

Revision 0f3e302547363ea237454dda891ddb5de1be4476, 2.8 KB (checked in by Tom Gilbert <tom@…>, 6 years ago)

initial import of rbot

  • Property mode set to 100644
Line 
1Saw = Struct.new("Saw", :nick, :time, :type, :where, :message)
2
3class 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 
87end
88plugin = SeenPlugin.new
89plugin.register("seen")
Note: See TracBrowser for help on using the browser.