Class: IrcLogModule
- Inherits:
-
CoreBotModule
- Object
- CoreBotModule
- IrcLogModule
- Defined in:
- /home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb
Overview
– vim:sw=2:et ++
:title: rbot IRC logging facilities
- Author
-
Giuseppe “Oblomov” Bilotta <giuseppe.bilotta@gmail.com>
Instance Attribute Summary (collapse)
-
- (Object) nolog_rx
readonly
Returns the value of attribute nolog_rx.
Instance Method Summary (collapse)
- - (Object) can_log_on(where)
- - (Object) cleanup
- - (Object) event_irclog_list_changed(nolist, dolist)
-
- (IrcLogModule) initialize
constructor
A new instance of IrcLogModule.
-
- (Object) irclog(message, where = "server")
log IRC-related message
message
to a file determined bywhere
. - - (Object) listen(m)
- - (Object) log_join(m)
- - (Object) log_kick(m)
- - (Object) log_message(m)
- - (Object) log_nick(m)
- - (Object) log_notice(m)
- - (Object) log_part(m)
- - (Object) log_quit(m)
-
- (Object) log_topic(m)
def log_invite(m) # TODO end.
- - (Object) logfile_close(where_str, reason = 'unknown reason')
- - (Object) logfilepath(where_str, now)
- - (Object) modechange(m)
- - (Object) motd(m)
- - (Object) sent(m)
- - (Object) timestamp(time)
-
- (Object) unknown_message(m)
def names(m) # TODO end.
- - (Object) welcome(m)
Constructor Details
- (IrcLogModule) initialize
Returns a new instance of IrcLogModule
31 32 33 34 35 36 37 38 39 40 41 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 31 def initialize super @queue = Queue.new @thread = Thread.new { loggers_thread } @logs = Hash.new logdir = @bot.path 'logs' Dir.mkdir(logdir) unless File.exist?(logdir) # TODO what shall we do if the logdir couldn't be created? (e.g. it existed as a file) event_irclog_list_changed(@bot.config['irclog.no_log'], @bot.config['irclog.do_log']) @fn_format = @bot.config['irclog.filename_format'] end |
Instance Attribute Details
- (Object) nolog_rx (readonly)
Returns the value of attribute nolog_rx
30 31 32 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 30 def nolog_rx @nolog_rx end |
Instance Method Details
- (Object) can_log_on(where)
43 44 45 46 47 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 43 def can_log_on(where) return true if @dolog_rx and where.match @dolog_rx return false if @nolog_rx and where.match @nolog_rx return true end |
- (Object) cleanup
77 78 79 80 81 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 77 def cleanup @queue << nil @thread.join @thread = nil end |
- (Object) event_irclog_list_changed(nolist, dolist)
53 54 55 56 57 58 59 60 61 62 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 53 def event_irclog_list_changed(nolist, dolist) @nolog_rx = nolist.empty? ? nil : Regexp.union(*(nolist.map { |r| r.to_irc_regexp })) debug "no log: #{@nolog_rx}" @dolog_rx = dolist.empty? ? nil : Regexp.union(*(dolist.map { |r| r.to_irc_regexp })) debug "do log: #{@dolog_rx}" @logs.inject([]) { |ar, kv| ar << kv.first unless can_log_on(kv.first) ar }.each { |w| logfile_close(w, 'logging disabled here') } end |
- (Object) irclog(message, where = "server")
log IRC-related message message
to a file determined by
where
. where
can be a channel name, or a nick for
private message logging
73 74 75 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 73 def irclog(, where="server") @queue.push [, where] end |
- (Object) listen(m)
118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 118 def listen(m) case m when PrivMessage method = 'log_message' else method = 'log_' + m.class.name.downcase.match(/^irc::(\w+)message$/).captures.first end if self.respond_to?(method) self.__send__(method, m) else warning "unhandled logging for #{m.pretty_inspect} (no such method #{method})" (m) end end |
- (Object) log_join(m)
194 195 196 197 198 199 200 201 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 194 def log_join(m) if m.address? debug "joined channel #{m.channel}" irclog "@ Joined channel #{m.channel}", m.channel else irclog "@ #{m.source} joined channel #{m.channel}", m.channel end end |
- (Object) log_kick(m)
212 213 214 215 216 217 218 219 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 212 def log_kick(m) if(m.address?) debug "kicked from channel #{m.channel}" irclog "@ You have been kicked from #{m.channel} by #{m.source} (#{m.})", m.channel else irclog "@ #{m.target} has been kicked from #{m.channel} by #{m.source} (#{m.})", m.channel end end |
- (Object) log_message(m)
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 133 def (m) if m.ctcp who = m.private? ? "me" : m.target logtarget = m.private? ? m.source : m.target case m.ctcp.intern when :ACTION if m.public? irclog "* #{m.source} #{m.}", m.target else irclog "* #{m.source}(#{m.sourceaddress}) #{m.}", m.source end when :VERSION irclog "@ #{m.source} asked #{who} about version info", logtarget when :SOURCE irclog "@ #{m.source} asked #{who} about source info", logtarget when :PING irclog "@ #{m.source} pinged #{who}", logtarget when :TIME irclog "@ #{m.source} asked #{who} what time it is", logtarget else irclog "@ #{m.source} asked #{who} about #{[m.ctcp, m.].join(' ')}", logtarget end else if m.public? irclog "<#{m.source}> #{m.}", m.target else irclog "<#{m.source}(#{m.sourceaddress})> #{m.}", m.source end end end |
- (Object) log_nick(m)
178 179 180 181 182 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 178 def log_nick(m) (m.is_on & @bot.myself.channels).each { |ch| irclog "@ #{m.oldnick} is now known as #{m.newnick}", ch } end |
- (Object) log_notice(m)
164 165 166 167 168 169 170 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 164 def log_notice(m) if m.private? irclog "-#{m.source}(#{m.sourceaddress})- #{m.}", m.source else irclog "-#{m.source}- #{m.}", m.target end end |
- (Object) log_part(m)
203 204 205 206 207 208 209 210 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 203 def log_part(m) if(m.address?) debug "left channel #{m.channel}" irclog "@ Left channel #{m.channel} (#{m.})", m.channel else irclog "@ #{m.source} left channel #{m.channel} (#{m.})", m.channel end end |
- (Object) log_quit(m)
184 185 186 187 188 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 184 def log_quit(m) (m.was_on & @bot.myself.channels).each { |ch| irclog "@ Quit: #{m.source}: #{m.}", ch } end |
- (Object) log_topic(m)
def log_invite(m)
# TODO
end
225 226 227 228 229 230 231 232 233 234 235 236 237 238 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 225 def log_topic(m) case m.info_or_set when :set if m.source == @bot.myself irclog "@ I set topic \"#{m.topic}\"", m.channel else irclog "@ #{m.source} set topic \"#{m.topic}\"", m.channel end when :info topic = m.channel.topic irclog "@ Topic is \"#{m.topic}\"", m.channel irclog "@ Topic set by #{topic.set_by} on #{topic.set_on}", m.channel end end |
- (Object) logfile_close(where_str, reason = 'unknown reason')
64 65 66 67 68 69 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 64 def logfile_close(where_str, reason = 'unknown reason') f = @logs.delete(where_str) or return stamp = (Time.now) f[1].puts "#{stamp} @ Log closed by #{@bot.myself.nick} (#{reason})" f[1].close end |
- (Object) logfilepath(where_str, now)
248 249 250 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 248 def logfilepath(where_str, now) @bot.path('logs', now.strftime(@fn_format) % { :where => where_str }) end |
- (Object) modechange(m)
190 191 192 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 190 def modechange(m) irclog "@ Mode #{m.} by #{m.source}", m.target end |
- (Object) motd(m)
172 173 174 175 176 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 172 def motd(m) m..each_line { |line| irclog "MOTD: #{line}", "server" } end |
- (Object) sent(m)
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 83 def sent(m) case m when NoticeMessage irclog "-#{m.source}- #{m.}", m.target when PrivMessage logtarget = who = m.target if m.ctcp case m.ctcp.intern when :ACTION irclog "* #{m.source} #{m.}", logtarget when :VERSION irclog "@ #{m.source} asked #{who} about version info", logtarget when :SOURCE irclog "@ #{m.source} asked #{who} about source info", logtarget when :PING irclog "@ #{m.source} pinged #{who}", logtarget when :TIME irclog "@ #{m.source} asked #{who} what time it is", logtarget else irclog "@ #{m.source} asked #{who} about #{[m.ctcp, m.].join(' ')}", logtarget end else irclog "<#{m.source}> #{m.}", logtarget end when QuitMessage m.was_on.each { |ch| irclog "@ quit (#{m.})", ch } end end |
- (Object) timestamp(time)
49 50 51 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 49 def (time) return time.strftime(@bot.config['irclog.timestamp_format']) end |
- (Object) unknown_message(m)
def names(m)
# TODO
end
244 245 246 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 244 def (m) irclog m., ".unknown" end |
- (Object) welcome(m)
114 115 116 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/core/irclog.rb', line 114 def welcome(m) irclog "joined server #{m.server} as #{m.target}", "server" end |