Focalor, I'm not trying to be a trouble magnet. I wasn't there when he started calling you and your clan "noobs". I just seen you calling him a noob after he beat you a few games. I apologize. Seriously!
Quote from: Suchit Deep on February 09, 2009, 04:24:42 PMFocalor, I'm not trying to be a trouble magnet. I wasn't there when he started calling you and your clan "noobs". I just seen you calling him a noob after he beat you a few games. I apologize. Seriously!Pathetic.
It's not like I know who Suchit Deep is, or know what he has done to get himself muted, but he seems honest and I think that an honest person deserves a second chance.
I thought the Admin was spoofing my name to say crap about me so I started saying things about him and that's when the mute was actually put on me.
In all honesty I wasn't trying to lie about why I was muted. Not in the slightest. Those were the only times I remember being muted.
Quote from: Suchit Deep on February 10, 2009, 05:29:44 AMIn all honesty I wasn't trying to lie about why I was muted. Not in the slightest. Those were the only times I remember being muted.Admins aren't allowed to mute you just for smack talking an admin. Are you suggesting your only memory of being muted is when an admin broke the rules? And not just once apparently but memories of this happening multiple times?We've got five years of server logs and a database of your IPs and player names. Is this the story you're sticking to?Regards,
Seems to me like whatever happened in the past should stay there. Talking about the why's and wherefore's isn't going anywhere. Like I said, if he's not currently eligible for removal of the ban, at least state a date at which time he will (if ever) be eligible to be unmuted. Or simply take him up on his proposal to completely ban him if he exhibits the same behavior after unmuting him. I think we're all pretty sure that if we keep poking at him in this thread, he'll revert to more of the same stuff that transpired in other similar threads. Honestly, I kinda expect him to go right back to doing the same old thing once he's unmuted. But hey, at that point, you can just ban him outright and never have deal with him again. He gets the last chance he's protesting for, and in the end we get to preserve the peace whether he speaks or not. Everybody wins.
Like I said, if he's not currently eligible for removal of the ban, at least state a date at which time he will (if ever) be eligible to be unmuted.
Actually I've been hoping this thread would be the thing that prods me into writing the "half mute" code I've wanted for some time now.
Index: wallfly/wallfly.rb===================================================================RCS file: /var/cvs/dorkbuster/dorkbuster/wallfly/wallfly.rb,vretrieving revision 1.35diff -u -r1.35 wallfly.rb--- wallfly/wallfly.rb 28 Oct 2008 02:51:03 -0000 1.35+++ wallfly/wallfly.rb 15 Feb 2009 00:13:07 -0000@@ -449,12 +449,14 @@ @votemaps = {} @bans = {} @compiled_bans = {}+ @stifle_clnum = {} @bs_tracker = BindSpamTracker.new( self.method(:cur_time).to_proc ) @issued_chatban_enable = false @last_bans_fsize = 0 @last_bans_mtime = Time.at(0) @vars = Hash.new("".freeze) @vars['defflags'] = ""+ @vars['default/stifle'] = "60" @vars['delay/same_map'] = "0" @vars['delay/ia'] = "0" @vars['delay/ws'] = "0"@@ -630,6 +632,8 @@ cmd_unban($1, :ban) elsif cmd =~ /\Awf,?\s+mute(?:\s+(\S+)(?:\s+(\S.*))?)?\z/i cmd_ban($1, $2, :mute, dbline.speaker)+ elsif cmd =~ /\Awf,?\s+stifle(?:\s+(\S+)(?:\s+(\S.*))?)?\z/i+ cmd_stifle($1, $2, dbline.speaker) elsif cmd =~ /\Awf,?\s+unmute(?:\s+(\S.*))?\z/i cmd_unban($1, :mute) elsif cmd =~ /\Awf,?\s+set(?:\s+(\S+)(?:\s+(\S.*))?)?\z/i@@ -663,6 +667,7 @@ # NOTE: playername may be wrong if name has colons and spaces in it :( playername, chat = $1, $2 chat, clnum, ip = parse_clnum_ip(chat)+ enforce_stifle(playername, clnum, ip) cmd_player_chatban_bindspam(playername, clnum, ip, chat) end end@@ -728,21 +733,43 @@ term end+ def ban_info_from_reason(reason)+ type = nil+ flags = {}+ if reason =~ / -mute(?:\s+(\d+))?$/+ type = :mute+ flags[:stifle_interval] = $1 ? $1.to_i : nil+ else+ type = :ban+ end+ [type, flags]+ end+ def ban_type_from_reason(reason)- (reason =~ /-mute$/) ? :mute : :ban+ # (reason =~ / -mute(\s+\d+)?$/) ? :mute : :ban+ type, flags = ban_info_from_reason(reason)+ type end def gen_ban_timestamp cur_time.strftime("%Y-%m-%d") end- def cmd_ban(ban_expr, reason, ban_type, admin_name)+ def gen_ban_reason(reason, ban_type, admin_name, flags)+ reason = reason.to_s.dup.strip.gsub(/\s+/, "_")+ tstamp = gen_ban_timestamp+ reason << "__#{admin_name}__#{tstamp}"+ if ban_type == :mute+ stifle_interval = flags[:stifle_interval] || 0+ reason = "#{reason} -mute #{stifle_interval}"+ end+ reason+ end++ def cmd_ban(ban_expr, reason, ban_type, admin_name, flags={}) if ban_expr if reason && !reason.to_s.strip.empty?- reason = reason.to_s.strip.gsub(/\s+/, "_")- tstamp = gen_ban_timestamp- reason << "__#{admin_name}__#{tstamp}"- reason = "#{reason} -mute" if ban_type == :mute+ reason = gen_ban_reason(reason, ban_type, admin_name, flags) ban, err = memo_compile_ban(ban_expr) if err reply(%{^aFailed to compile #{bt('ban',ban_type)} expression: #{err}})@@ -791,6 +818,20 @@ end end+ def cmd_stifle(ban_expr, reason, admin_name)+ stint = @vars['default/stifle'].to_i+ if ban_expr+ if stint < 1+ reply(%{Error: The "default/stifle" variable must be set to the number of seconds the player is to be muted after they speak.})+ else+ flags = {:stifle_interval => stint}+ cmd_ban(ban_expr, reason, :mute, admin_name, flags)+ end+ else+ reply(%{Stifle: The player will be muted for "default/stifle" = #{stint} seconds after they speak.})+ end+ end+ def cmd_set(varname, value) if varname if not legal_varname?(varname)@@ -1098,6 +1139,7 @@ end def handle_player_connect(playername, clnum, ip)+ reset_stifle_for_clnum(clnum) enforce_bans(playername, clnum, ip, false) end@@ -1263,34 +1305,50 @@ host end+ def apply_ban(clnum)+# reply(%{rcon addhole #{ip}/32 SILENT wallfly-ban: #{reason}})+ reply(%{rcon kick #{clnum}})+ end++ def apply_mute(clnum, ip, entering_game)+ reply_str = %{rcon sv !mute CL #{clnum} PERM}+ 6.times { sleep(0.5) unless $TESTING; reply(reply_str) } # stupid q2admin+ end+ def enforce_bans(playername, clnum, ip, entering_game) rdns_host = get_host_for_ip(ip) $stderr.puts "enforce_bans: name(#{playername}) clnum(#{clnum}) ip(#{ip}) entering(#{entering_game}) rdns_host(#{rdns_host})"- slept_yet = false # KLUDGE for stupid q2admin which can't find the player slot even after ENTER_GAME @bans.each_pair do |ban_expr, reason|- ban_type = ban_type_from_reason(reason)+ ban_type, ban_flags = ban_info_from_reason(reason) is_mute = (ban_type == :mute)- next if is_mute && !entering_game+ squawk_proc = lambda {+ color_ch = is_mute ? "d" : "9"+ reply_str = %{^#{color_ch}#{bt('BAN',ban_type)}: "#{playername}" #{ip} (#{rdns_host}) [RULE: #{ban_expr} REASON: "#{reason}"]}+ is_mute ? replylog(reply_str) : reply(reply_str)+ } ban, err = memo_compile_ban(ban_expr) if ban mst = ban.match(playername, ip, rdns_host) if mst.trigger?- color_ch = is_mute ? "d" : "9"- reply_str = %{^#{color_ch}#{bt('BAN',ban_type)}: "#{playername}" #{ip} (#{rdns_host}) [RULE: #{ban_expr} REASON: "#{reason}"]}- is_mute ? replylog(reply_str) : reply(reply_str)+ applied = true if ban_type == :ban-# reply(%{rcon addhole #{ip}/32 SILENT wallfly-ban: #{reason}})- reply(%{rcon kick #{clnum}})+ squawk_proc.call+ apply_ban(clnum) elsif ban_type == :mute- reply_str = %{rcon sv !mute CL #{clnum} PERM}- unless slept_yet- 6.times { sleep(0.5) unless $TESTING; reply(reply_str) } # stupid q2admin- slept_yet = true- else- reply(reply_str)- end+ stint = ban_flags[:stifle_interval].to_i+ if stint > 0+ applied = false+ set_stifle_for_clnum(clnum, stint)+ else+ if entering_game+ squawk_proc.call+ apply_mute(clnum, ip, entering_game)+ else+ applied = false+ end+ end end- return+ return if applied elsif mst.partial? replylog(%{^a#{bt('BAN',ban_type)} PARTIAL MATCH: "#{playername}" #{ip} (#{rdns_host}) [RULE: #{ban_expr} REASON: "#{reason}"]}) end@@ -1301,6 +1359,20 @@ end end+ def enforce_stifle(playername, clnum, ip)+ if (mute_secs = @stifle_clnum[clnum])+ reply(%{rcon sv !mute CL #{clnum} #{mute_secs}})+ end+ end++ def set_stifle_for_clnum(clnum, stint)+ @stifle_clnum[clnum] = stint+ end++ def reset_stifle_for_clnum(clnum)+ @stifle_clnum.delete clnum+ end+