4 # :title: linkbot management for rbot
6 # Author:: Giuseppe "Oblomov" Bilotta <giuseppe.bilotta@gmail.com>
7 # Copyright:: (C) 2006 Giuseppe Bilotta
10 # Based on an idea by hagabaka (Yaohan Chen <yaohan.chen@gmail.com>)
12 # This plugin is used to grab messages from eggdrops (or other bots) that link
13 # channels from different networks. For the time being, a PRIVMSG echoed by an
14 # eggdrop is assumed to be in the form:
15 # <eggdrop> (nick@network) text of the message
16 # (TODO make it configurable) and it's fed back to the message delegators.
18 # This plugin also shows how to create 'fake' messages from a plugin, letting
21 # TODO a possible enhancement to the Irc framework could be to create 'fake'
22 # servers to make this even easier.
24 class LinkBot < Plugin
25 BotConfig.register BotConfigArrayValue.new('linkbot.nicks',
27 :desc => "Nick(s) of the bots that act as channel links across networks")
29 # Initialize the plugin
36 linkbots = @bot.config['linkbot.nicks']
37 return if linkbots.empty?
38 return unless linkbots.include?(m.sourcenick)
39 return unless m.kind_of?(PrivMessage)
40 # Now we know that _m_ is a PRIVMSG from a linkbot. Let's split it
41 # in nick, network, message
42 if m.message.match(/^\((\S+?)@(\S+?)\)\s+(.*)$/)
47 debug "#{m.sourcenick} reports that #{new_nick} said #{message.inspect} on #{network}"
48 # One way to pass the new message back to the bot is to create a PrivMessage
49 # and delegate it to the plugins
50 new_m = PrivMessage.new(@bot, m.server, m.server.user(new_nick), m.target, message)
51 @bot.plugins.delegate "listen", new_m
52 @bot.plugins.privmsg(new_m) if new_m.address?
54 ## Another way is to create a data Hash with source, target and message keys
55 ## and then letting the bot client :privmsg handler handle it
56 ## Note that this will also create irclog entries for the fake PRIVMSG
57 ## TODO we could probably add a :no_irc_log entry to the data passed to the
58 ## @bot.client handlers, or something like that
60 # :source => m.server.user(new_nick)
64 # @bot.client[:privmsg].call(data)