diff options
-rw-r--r-- | lib/rbot/ircbot.rb | 9 | ||||
-rw-r--r-- | lib/rbot/ircsocket.rb | 6 |
2 files changed, 13 insertions, 2 deletions
diff --git a/lib/rbot/ircbot.rb b/lib/rbot/ircbot.rb index 6fc92589..2400f612 100644 --- a/lib/rbot/ircbot.rb +++ b/lib/rbot/ircbot.rb @@ -395,6 +395,13 @@ class Bot bot.set_default_send_options :truncate_text => v.dup }, :desc => "When truncating overlong messages (see send.overlong) or when sending too many lines per message (see send.max_lines) replace the end of the last line with this text") + Config.register Config::IntegerValue.new('send.penalty_pct', + :default => 100, + :validate => Proc.new { |v| v >= 0 }, + :on_change => Proc.new { |bot, v| + bot.socket.penalty_pct = v + }, + :desc => "Percentage of IRC penalty to consider when sending messages to prevent being disconnected for excess flood. Set to 0 to disable penalty control.") @argv = params[:argv] @run_dir = params[:run_dir] || Dir.pwd @@ -581,7 +588,7 @@ class Bot debug "server.list is now #{@config['server.list'].inspect}" end - @socket = Irc::Socket.new(@config['server.list'], @config['server.bindhost'], :ssl => @config['server.ssl']) + @socket = Irc::Socket.new(@config['server.list'], @config['server.bindhost'], :ssl => @config['server.ssl'], :penalty_pct =>@config['send.penalty_pct']) @client = Client.new @plugins.scan diff --git a/lib/rbot/ircsocket.rb b/lib/rbot/ircsocket.rb index 9adca6ba..36a223f9 100644 --- a/lib/rbot/ircsocket.rb +++ b/lib/rbot/ircsocket.rb @@ -246,6 +246,9 @@ module Irc # normalized uri of the current server attr_reader :server_uri + # penalty multiplier (percent) + attr_accessor :penalty_pct + # default trivial filter class class IdentityFilter def in(x) @@ -276,6 +279,7 @@ module Irc @lines_sent = 0 @lines_received = 0 @ssl = opts[:ssl] + @penalty_pct = opts[:penalty_pct] || 100 end def connected? @@ -433,7 +437,7 @@ module Irc @sock.syswrite actual @last_send = now @flood_send = now if @flood_send < now - @flood_send += message.irc_send_penalty if penalty + @flood_send += message.irc_send_penalty*@penalty_pct/100.0 if penalty @lines_sent += 1 end rescue Exception => e |