X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=lib%2Frbot%2Fircbot.rb;h=58cbb46d688723293bf284ab0259a6687a08c2da;hb=d393443de7dd737c245ce97aeac2761e1982fa48;hp=b58ebe2efdf2dec192d71f6bfea1f687b7950f15;hpb=b970f0d43f6bf69e4aec75120a9bf27b412ec331;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git diff --git a/lib/rbot/ircbot.rb b/lib/rbot/ircbot.rb index b58ebe2e..58cbb46d 100644 --- a/lib/rbot/ircbot.rb +++ b/lib/rbot/ircbot.rb @@ -147,14 +147,10 @@ class Bot def initialize(botclass, params = {}) # BotConfig for the core bot # TODO should we split socket stuff into ircsocket, etc? - BotConfig.register BotConfigStringValue.new('server.name', - :default => "localhost", :requires_restart => true, - :desc => "What server should the bot connect to?", - :wizard => true) - BotConfig.register BotConfigIntegerValue.new('server.port', - :default => 6667, :type => :integer, :requires_restart => true, - :desc => "What port should the bot connect to?", - :validate => Proc.new {|v| v > 0}, :wizard => true) + BotConfig.register BotConfigArrayValue.new('server.list', + :default => ['irc://localhost'], :wizard => true, + :requires_restart => true, + :desc => "List of irc servers rbot should try to connect to. Use comma to separate values. Servers are in format 'server.doma.in:port'. If port is not specified, default value (6667) is used.") BotConfig.register BotConfigBooleanValue.new('server.ssl', :default => false, :requires_restart => true, :wizard => true, :desc => "Use SSL to connect to this server?") @@ -243,7 +239,7 @@ class Bot :desc => "Maximum console messages logfile size (in megabytes)") BotConfig.register BotConfigArrayValue.new('plugins.path', - :wizard => true, :default => ['(default)', '(default)/contrib'], + :wizard => true, :default => ['(default)', '(default)/games', '(default)/contrib'], :requires_restart => false, :on_change => Proc.new { |bot, v| bot.setup_plugins_path }, :desc => "Where the bot should look for plugin. List multiple directories using commas to separate. Use '(default)' for default prepackaged plugins collection, '(default)/contrib' for prepackaged unsupported plugins collection") @@ -437,11 +433,21 @@ class Bot @auth.botowner.password= @config['auth.password'] Dir.mkdir("#{botclass}/plugins") unless File.exist?("#{botclass}/plugins") - @plugins = Plugins::pluginmanager + @plugins = Plugins::manager @plugins.bot_associate(self) setup_plugins_path() - @socket = IrcSocket.new(@config['server.name'], @config['server.port'], @config['server.bindhost'], @config['server.sendq_delay'], @config['server.sendq_burst'], :ssl => @config['server.ssl']) + if @config['server.name'] + debug "upgrading configuration (server.name => server.list)" + srv_uri = 'irc://' + @config['server.name'] + srv_uri += ":#{@config['server.port']}" if @config['server.port'] + @config.items['server.list'.to_sym].set_string(srv_uri) + @config.delete('server.name'.to_sym) + @config.delete('server.port'.to_sym) + debug "server.list is now #{@config['server.list'].inspect}" + end + + @socket = IrcSocket.new(@config['server.list'], @config['server.bindhost'], @config['server.sendq_delay'], @config['server.sendq_burst'], :ssl => @config['server.ssl']) @client = Client.new @plugins.scan @@ -716,7 +722,7 @@ class Bot quit if $interrupted > 0 @socket.connect rescue => e - raise e.class, "failed to connect to IRC server at #{@config['server.name']} #{@config['server.port']}: " + e + raise e.class, "failed to connect to IRC server at #{@socket.server_uri}: " + e end quit if $interrupted > 0 @@ -724,7 +730,7 @@ class Bot realname << ' ' + COPYRIGHT_NOTICE if @config['irc.name_copyright'] @socket.emergency_puts "PASS " + @config['server.password'] if @config['server.password'] - @socket.emergency_puts "NICK #{@config['irc.nick']}\nUSER #{@config['irc.user']} 4 #{@config['server.name']} :#{realname}" + @socket.emergency_puts "NICK #{@config['irc.nick']}\nUSER #{@config['irc.user']} 4 #{@socket.server_uri.host} :#{realname}" quit if $interrupted > 0 myself.nick = @config['irc.nick'] myself.user = @config['irc.user'] @@ -973,12 +979,16 @@ class Bot def irclog(message, where="server") message = message.chomp stamp = Time.now.strftime("%Y/%m/%d %H:%M:%S") - where = where.downcase.gsub(/[:!?$*()\/\\<>|"']/, "_") - unless(@logs.has_key?(where)) - @logs[where] = File.new("#{@botclass}/logs/#{where}", "a") - @logs[where].sync = true + if where.class <= Server + where_str = "server" + else + where_str = where.downcase.gsub(/[:!?$*()\/\\<>|"']/, "_") + end + unless(@logs.has_key?(where_str)) + @logs[where_str] = File.new("#{@botclass}/logs/#{where_str}", "a") + @logs[where_str].sync = true end - @logs[where].puts "[#{stamp}] #{message}" + @logs[where_str].puts "[#{stamp}] #{message}" #debug "[#{stamp}] <#{where}> #{message}" end @@ -1162,15 +1172,15 @@ class Bot def irclogprivmsg(m) if(m.action?) if(m.private?) - irclog "* [#{m.sourcenick}(#{m.sourceaddress})] #{m.message}", m.sourcenick + irclog "* [#{m.source}(#{m.sourceaddress})] #{m.message}", m.source else - irclog "* #{m.sourcenick} #{m.message}", m.target + irclog "* #{m.source} #{m.message}", m.target end else if(m.public?) - irclog "<#{m.sourcenick}> #{m.message}", m.target + irclog "<#{m.source}> #{m.message}", m.target else - irclog "[#{m.sourcenick}(#{m.sourceaddress})] #{m.message}", m.sourcenick + irclog "[#{m.source}(#{m.sourceaddress})] #{m.message}", m.source end end end @@ -1200,7 +1210,7 @@ class Bot debug "joined channel #{m.channel}" irclog "@ Joined channel #{m.channel}", m.channel else - irclog "@ #{m.sourcenick} joined channel #{m.channel}", m.channel + irclog "@ #{m.source} joined channel #{m.channel}", m.channel end end @@ -1209,16 +1219,16 @@ class Bot debug "left channel #{m.channel}" irclog "@ Left channel #{m.channel} (#{m.message})", m.channel else - irclog "@ #{m.sourcenick} left channel #{m.channel} (#{m.message})", m.channel + irclog "@ #{m.source} left channel #{m.channel} (#{m.message})", m.channel end end def irclogkick(m) if(m.address?) debug "kicked from channel #{m.channel}" - irclog "@ You have been kicked from #{m.channel} by #{m.sourcenick} (#{m.message})", m.channel + irclog "@ You have been kicked from #{m.channel} by #{m.source} (#{m.message})", m.channel else - irclog "@ #{m.target} has been kicked from #{m.channel} by #{m.sourcenick} (#{m.message})", m.channel + irclog "@ #{m.target} has been kicked from #{m.channel} by #{m.source} (#{m.message})", m.channel end end