summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2008-12-12 20:59:34 +0100
committerGiuseppe Bilotta <giuseppe.bilotta@gmail.com>2008-12-12 21:40:20 +0100
commit1579c60ee8ad2cb24eadbec66bfe3710775b2a05 (patch)
tree0a9eb19fb06905d6703c4e881abdb88c7c9b4e85 /lib
parentf11630a55cf8775ccf021fa769404af7ef8e5aa1 (diff)
ircsocket: tunable IRC penalty
Diffstat (limited to 'lib')
-rw-r--r--lib/rbot/ircbot.rb9
-rw-r--r--lib/rbot/ircsocket.rb6
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