]> git.netwichtig.de Git - user/henk/code/ruby/rbot.git/blob - lib/rbot/core/journal_irclog.rb
Merge pull request #4 from ahpook/rename_karma
[user/henk/code/ruby/rbot.git] / lib / rbot / core / journal_irclog.rb
1 #-- vim:sw=2:et
2 #++
3 #
4 # :title: irc logging into the journal
5 #
6 # Author:: Matthias Hecker (apoc@geekosphere.org)
7
8 class JournalIrcLogModule < CoreBotModule
9
10   include Irc::Bot::Journal
11
12   Config.register Config::ArrayValue.new('journal.irclog.whitelist',
13     :default => [],
14     :desc => 'only perform journal irc logging for those channel/users')
15
16   Config.register Config::ArrayValue.new('journal.irclog.blacklist',
17     :default => [],
18     :desc => 'exclude journal irc logging for those channel/users')
19
20   def publish(payload)
21     if payload[:target]
22       target = payload[:target]
23       whitelist = @bot.config['journal.irclog.whitelist']
24       blacklist = @bot.config['journal.irclog.blacklist']
25       unless whitelist.empty?
26         return unless whitelist.include? target
27       end
28       unless blacklist.empty?
29         return if blacklist.include? target
30       end
31     end
32     @bot.journal.publish('irclog', payload)
33   end
34
35   def log_message(m)
36     unless m.kind_of? BasicUserMessage
37       warning 'journal irc logger can\'t log %s message' % [m.class.to_s]
38     else
39       payload = {
40         type: m.class.name.downcase.match(/(\w+)message/).captures.first,
41         addressed: m.address?,
42         replied: m.replied?,
43         identified: m.identified?,
44
45         source: m.source.to_s,
46         source_user: m.botuser.to_s,
47         source_address: m.sourceaddress,
48         target: m.target.to_s,
49         server: m.server.to_s,
50
51         message: m.logmessage,
52       }
53       publish(payload)
54     end
55   end
56
57   # messages sent
58   def sent(m)
59     log_message(m)
60   end
61
62   # messages received
63   def listen(m)
64     log_message(m)
65   end
66 end
67
68 plugin = JournalIrcLogModule.new
69 # make sure the logger gets loaded after the journal
70 plugin.priority = -1
71