[Tkabber-dev] r310 - in trunk/plugins/bldjid: . msgs

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Tue Feb 23 11:22:27 MSK 2010


Author: bigote
Date: 2010-02-23 11:22:27 +0300 (Tue, 23 Feb 2010)
New Revision: 310

Modified:
   trunk/plugins/bldjid/ChangeLog
   trunk/plugins/bldjid/README
   trunk/plugins/bldjid/README.ru
   trunk/plugins/bldjid/bldjid.tcl
   trunk/plugins/bldjid/msgs/ru.msg
Log:
Added a "valve" to /amnesty command processing that prevents creating oversized stanza (that can provoke Stream error and disconnection from server).
Fixed a bug that gave an error when processing jids with their login part enclosed by curly braces: {login}@jabber.ru


Modified: trunk/plugins/bldjid/ChangeLog
===================================================================
--- trunk/plugins/bldjid/ChangeLog	2010-02-22 22:04:18 UTC (rev 309)
+++ trunk/plugins/bldjid/ChangeLog	2010-02-23 08:22:27 UTC (rev 310)
@@ -1,3 +1,29 @@
+2010-02-23  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
+
+--- Version 0.9.5 of the plugin.
+
+--- Files modified:
+    bldjid.tcl, README, README.ru, ChangeLog.
+
+--- Changes:
+	Added a "valve" to /amnesty command processing that prevents creating
+	oversized stanza (that can provoke Stream error and disconnection
+	from server).
+	Fixed a bug that gave an error when processing jids with their login part
+	enclosed by curly braces: {login}@jabber.ru
+
+2010-02-23  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
+
+--- Version 0.9.4 of the plugin.
+
+--- Files modified:
+    bldjid.tcl, README, README.ru, ChangeLog, msgs/ru.msg.
+
+--- Changes:
+	Added a possibility to do a "partial amnesty", or cleaning up: unban only
+	those people whose ban reason matches a certain pattern, like this:
+	/amnesty your nick is too long
+
 2010-02-21  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
 
 --- Version 0.9.3 of the plugin.

Modified: trunk/plugins/bldjid/README
===================================================================
--- trunk/plugins/bldjid/README	2010-02-22 22:04:18 UTC (rev 309)
+++ trunk/plugins/bldjid/README	2010-02-23 08:22:27 UTC (rev 310)
@@ -24,7 +24,21 @@
 	To do so, just write there the following command:
 /amnesty
 and after a confirmation all outcasts from that room will be unbanned.
+It is not recommended to use this command where you are not an owner.
+	Sometimes you might just want to clean up your ban list without erasing it.
+	For instance, if a bot banned a lot of atackers some time ago
+	providing some reason, now you can use it to delete those most likely
+	termporary jids from your ban list in order to be able to open it faster.
+	Just specify a pattern that matches a required reason, for example:
+/amnesty your nick is too long
+	People (or bots) with reasons like "Your nick is TOO LONG!!!" will be unbanned.
 
+	Please note that processing of too big ban lists (over more or less 700 entries)
+	can provoke Stream Error (Policy Violation) and disconnection from server.
+	The reason is the oversized resulting stanza which is being sent to the server.
+	That's why a "valve" was added that shoots sending query when 700 entries are ready.
+	That means that huge ban lists should be processed several times.
+
 ---	You can search for a certain word in the black list or in the member list
 	of the current room using the following commands:
 /inbanlist pattern

Modified: trunk/plugins/bldjid/README.ru
===================================================================
--- trunk/plugins/bldjid/README.ru	2010-02-22 22:04:18 UTC (rev 309)
+++ trunk/plugins/bldjid/README.ru	2010-02-23 08:22:27 UTC (rev 310)
@@ -27,7 +27,22 @@
 и после подтверждения все забаненные в ней люди будут разбанены.
 Настоятельно советую не пользоваться этой командой в комнатах,
 где вы не хозяин, а только администратор.
+	Иногда вам может понадобиться лишь почистить бан-лист, не стирая его полностью.
+	Например, за много лет ваш бот набанил множество атакующих,
+	указывая какую-либо причину, и сейчас вы хотите удалить эти, скорее всего,
+	временные дждиды из бан-листа, чтобы он открывался побыстрее.
+	Для этого добавьте к команде паттерн, подходящий к нужной причине:
+/amnesty ваш ник слишком длинный
+	Люди (или боты), чья причина бана похожа на такую: "Ваш ник СЛИШКОМ ДЛИННЫЙ!!!",
+	будут разбанены.
 
+	Пожалуйста, имейте в виду, что обработка слишком больших бан-листов (более 700 джидов)
+	может вызвать Ошибку потока (Нарушение политики) и отключение от сервера.
+	Причина кроется в слишком большом размере станцы, отсылаемой на сервер.
+	Чтобы избежать этого, был добавлен "клапан", срабатывающий, когда в станцу
+	набирается 700 джидов. Это означает, что огромные бан-листы следует обрабатывать
+	в несколько заходов.
+
 ---	Вы можете искать определённое слово в чёрном списке или в списке членов
 	текущей комнаты с помощью следующих команд:
 /inbanlist pattern

Modified: trunk/plugins/bldjid/bldjid.tcl
===================================================================
--- trunk/plugins/bldjid/bldjid.tcl	2010-02-22 22:04:18 UTC (rev 309)
+++ trunk/plugins/bldjid/bldjid.tcl	2010-02-23 08:22:27 UTC (rev 310)
@@ -1,4 +1,4 @@
-# "Bldjid" plugin for Tkabber. 2010-02-21 v. 0.9.3
+# "Bldjid" plugin for Tkabber. 2010-02-23 v. 0.9.5
 # Written by Serge Yudin xmpp:bigote at jabber.ru
 # See README or README.ru file for usage.
 
@@ -289,6 +289,7 @@
 		lassign [::plugins::muc::parse_nick_reason $body 8] jid reason
 		set params {affiliation outcast}
 	} elseif {[string equal [string range $body 0 7] "/amnesty"]} {
+		set reason [::plugins::muc::parse_nick $body 8]
 		set attr affiliation
 		set val outcast
 	} elseif {[string equal [string range $body 0 8] "/visitors"]} {
@@ -348,17 +349,25 @@
 			if {[winfo exists $w]} {
 				destroy $w
 			}
+			if {$reason == ""} {
+				set say [::msgcat::mc "Are you sure you want to unban all outcasts in this room?\n\
+				There will be no backup: you're either kind-hearted or not :)"]
+			} else {
+				set say [::msgcat::mc "Are you sure you want to unban people in this room\n\
+				whose ban reason matches '%s'?\n\
+				There will be no backup: you're either kind-hearted or not :)" [string trim $reason]]
+			}
 			Dialog $w -title [::msgcat::mc "Forgive all outcasts here?"] \
 				-modal none -separator 1 -anchor e -default 0 -cancel 1 \
 				-parent .
 				set f [$w getframe]
 				$w add -text [::msgcat::mc "OK"] \
-				-command [list [namespace current]::amnesty $chatid $attr $val $w $f]
+				-command [list [namespace current]::amnesty \
+				$chatid $attr $val $w $f $reason]
 				$w add -text [::msgcat::mc "Cancel"] -command [list destroy $w]
 
 				label $w.lsure -padx 10 -pady 5 \
-				-text [::msgcat::mc "Are you sure you want to unban all outcasts in this room?\n\
-				There will be no backup: you're either kind-hearted or not :)"]
+				-text $say
 				pack $w.lsure -expand yes -fill both
 				$w draw
 		}
@@ -413,9 +422,9 @@
 	return
 }
 
-proc bldjid::amnesty {chatid attr val w f} {
-#	set group [chat::get_jid $chatid]
-	[namespace current]::request_list $attr $val $chatid amnesty
+proc bldjid::amnesty {chatid attr val w f reason} {
+	set reason [linsert $reason 0 amnesty]
+	[namespace current]::request_list $attr $val $chatid $reason
 	destroy $w
 }
 
@@ -424,7 +433,8 @@
 	set group [chat::get_jid $chatid]
 	set comm [lindex $cmd 0]
 	if {$comm == "amnesty"} {
-			set cmd [list [namespace current]::receive_send_list $attr $val $chatid]
+			set cmd [list [namespace current]::receive_send_list \
+			$attr $val $chatid $cmd]
 	} elseif {$comm == "inbanlist" || $comm == "inmemberlist"} {
 		set jid ""
 		if {[llength $cmd] > 1} {
@@ -502,7 +512,7 @@
 	[namespace current]::print_search_res $chatid $group $header $msg
 }
 
-proc bldjid::receive_send_list {attr val chatid res child} {
+proc bldjid::receive_send_list {attr val chatid cmd res child} {
 	set xlib [chat::get_xlib $chatid]
 	set group [chat::get_jid $chatid]
 	if {![string equal $res ok]} {
@@ -510,6 +520,10 @@
 		"$attr $val list: [error_to_string $child]" {}
 		return
 	}
+	set rsn ""
+	if {[llength $cmd] > 1} {
+		set rsn [lreplace $cmd 0 0]
+	}
 	::xmpp::xml::split $child tag xmlns attrs cdata items
 	if {$items == {}} {
 		chat::add_message $chatid $group error \
@@ -517,6 +531,7 @@
 		return
 	}
 	set items2 {}
+	set i 0
 	foreach item $items {
 		::xmpp::xml::split $item tag xmlns attrs cdata subels
 		switch -- $tag {
@@ -535,9 +550,28 @@
 				set itemsubtags {}
 				lappend itemsubtags [::xmpp::xml::create reason \
 					-cdata $reason]
-				lappend items2 [::xmpp::xml::create item \
-					-attrs "affiliation none jid $jid" \
-					-subelements $itemsubtags]
+				if {$rsn != "" && [string match -nocase *$rsn* $reason]} {
+					if {[string match \{*\}* $jid]} {
+						set jid [string map {\{ \\\{ \} \\\}} $jid]
+					}
+					lappend items2 [::xmpp::xml::create item \
+						-attrs "affiliation none jid $jid" \
+						-subelements $itemsubtags]
+# Checking if we already have 700 jids prepared. You can try to set more
+# but I got Stream error when sending 1300 jids. The limit is in between :)
+					incr i
+					if {$i > 700} {
+						break
+					}
+				} elseif {$rsn == ""} {
+					lappend items2 [::xmpp::xml::create item \
+						-attrs "affiliation none jid $jid" \
+						-subelements $itemsubtags]
+					incr i
+					if {$i > 700} {
+						break
+					}
+				}
 			}
 		}
 	}
@@ -551,12 +585,20 @@
 			[::msgcat::mc "Sending %s %s list" $attr $val] \
 			$xlib $group $chatid]
 	}
-	chat::add_message $chatid $group info \
-	[::msgcat::mc "Thank you for your generosity! +10 to Reputation!"] {}
-		    set ts [clock format [clock seconds] \
-			-format $::plugins::options(timestamp_format)]
-            set msg4log "$ts   All users are succesfully UNbanned in the room $group."
-		    [namespace current]::log_msg $msg4log
+	set ts [clock format [clock seconds] \
+		-format $::plugins::options(timestamp_format)]
+	if {$rsn == ""} {
+		set postamnesty [::msgcat::mc \
+			"Thank you for your generosity! +10 to Reputation!"]
+		set msg4log "$ts   All users are succesfully UNbanned in the room $group."
+	} else {
+		set postamnesty [::msgcat::mc \
+			"Thank you for your generosity! +1 to Reputation!"]
+		set msg4log "$ts   Users whose ban reason matched '$rsn' \
+			are succesfully UNbanned in the room $group."
+	}
+	chat::add_message $chatid $group info $postamnesty {}
+	[namespace current]::log_msg $msg4log
 }
 
 # Here we get our role and affiliation in a room.
@@ -832,6 +874,8 @@
 	\n/unbldjid JID\
 	\n\nUnban all people banned in the current room:\
 	\n/amnesty\
+	\n\nUnban people in the current room whose ban reason matches *some reason*:\
+	\n/amnesty some reason\
 	\n\nSearch for a pattern in the outcast list of the current room:\
 	\n/inbanlist pattern\
 	\n\nSearch for a pattern in the member list of the current room:\

Modified: trunk/plugins/bldjid/msgs/ru.msg
===================================================================
--- trunk/plugins/bldjid/msgs/ru.msg	2010-02-22 22:04:18 UTC (rev 309)
+++ trunk/plugins/bldjid/msgs/ru.msg	2010-02-23 08:22:27 UTC (rev 310)
@@ -24,6 +24,8 @@
 ::msgcat::mcset ru "OK"
 ::msgcat::mcset ru "Are you sure you want to unban all outcasts in this room?\n There will be no backup: you're either kind-hearted or not :)" \
 "Вы уверены, что хотите разбанить всех забаненных в этой комнате?\n Это действие нельзя будет отменить: либо вы добрый человек, либо нет :)"
+::msgcat::mcset ru "Are you sure you want to unban people in this room\n whose ban reason matches '%s'?\n\ There will be no backup: you're either kind-hearted or not :)" \
+"Вы уверены, что хотите разбанить в этой комнате людей,\n чья причина бана подходит к '%s'?\n Это действие нельзя будет отменить: либо вы добрый человек, либо нет :)"
 ::msgcat::mcset ru "Plugins options." "Настройки плагинов."
 ::msgcat::mcset ru "Redirect output of /visit* and /bldhelp commands to a special monitor window. Use <Ctrl-m> to toggle between monitor states." \
 "Перенаправлять вывод команд /visit* и /bldhelp в специальное окно монитора. Для включения/выключения окна пользуйтесь сочетанием клавиш Ctrl-m."
@@ -31,6 +33,8 @@
 ::msgcat::mcset ru "Sending %s %s list"
 ::msgcat::mcset ru "Thank you for your generosity! +10 to Reputation!" \
 "Спасибо за ваше великодушие! +10 к Репутации!"
+::msgcat::mcset ru "Thank you for your generosity! +1 to Reputation!" \
+"Спасибо за ваше великодушие! +1 к Репутации!"
 ::msgcat::mcset ru "This option doesn't prevent logging in the rooms where you don't have admin privileges but it helps in not showing such results." \
 "Эта опция не выключает ведение списка джидов в комнатах, где у вас нет админских прав, но с её помощью вам не будут показываться эти результаты."
 ::msgcat::mcset ru "Verbosity level." "Уровень подробности."
@@ -54,8 +58,8 @@
 ::msgcat::mcset ru "The list is empty." "Список пуст."
 ::msgcat::mcset ru "You turned off showing results in the rooms where you don't have admin privileges." \
 "Вы отключили показ результатов в комнатах, где у вас нет админских прав."
-::msgcat::mcset ru "\nBan in all rooms where you have admin privileges: \n/bldjid JID \nSome reason for banning (optional). \n\nUnban a banned person in these rooms: \n/unbldjid JID \n\nUnban all people banned in the current room: \n/amnesty \n\nSearch for a pattern in the outcast list of the current room: \n/inbanlist pattern \n\nSearch for a pattern in the member list of the current room: \n/inmemberlist pattern \n\nShow all visitors of the current room: \n/visitors \n\nShow all visitors of rooms that match *room*: \n/visitors room \n\nShow visits made by someone whose nick matches *nick*: \n/visited nick \n\nShows visits made by *nick*, to the rooms that match *room*: \n/visited nick \nroom \n\nThe same fashion as previous, but looking for\ \njids, roles, affiliations and versions:\ \n/visited jid john\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nAn enhancement of the previous command that allows searching in log file:\ \n/visited log nick\ \n/visited log jid mylogin at jabberserver.org\ \nroom\ \n/visited log ver Gajim Version: 0.12.1 OS: Windows XP\ \n\nBan in all rooms where you have admin privileges: \n?n? means an item number from a list given by a /visit* command. \n/bldjid ?n? \nSome reason for banning (optional). \n\nClear the current monitor window: \n/clearmon \n\nTo toggle between Show and Close monitor states use <Control-m> shortcut. \n\nSee README file for more information. \nVisit Tkabber -> Customize -> Plugins -> Bldjid \nto tune the plugin for your needs." \
-"\nЗабанить во всех комнатах, где у вас есть админские права: \n/bldjid JID \nПричина бана (необязательна). \n\nРазбанить забаненного пользователя в таких комнатах: \n/unbldjid JID \n\nРазбанить всех забаненных в текущей комнате: \n/amnesty \n\nИскать слово в чёрном списке текущей комнаты: \n/inbanlist pattern \n\nИскать слово в списке членов текущей комнаты: \n/inmemberlist pattern \n\nПоказать всех посетителей в текущей комнате: \n/visitors \n\nПоказать всех посетителей комнаты, название которой подходит к *room*: \n/visitors room \n\nПоказать визиты пользователя, чей ник подходит к *nick*: \n/visited nick \n\nПоказать визиты, сделанные *nick*, в комнаты, подходящие к *room*: \n/visited nick \nroom \n\nКак и в предыдущих двух случаях, но ищем джиды, роли, ранги и версии:\ \n/visited jid pupkin\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nРасширение предыдущей команды, позволяющее искать в файле лога:\ \n/visited log nick \n/visited log jid mylogin at jabberserver.org\ \nroom\ \n/visited log ver Gajim Версия: 0.12.1 ОС: Windows XP\ \n\nЗабанить во всех комнатах, где у вас есть админские права: \n?n? означает номер в списке, выведенном по команде /visit*. \n/bldjid ?n? \nПричина бана (необязательна). \n\nОчистить текущее окно монитора: \n/clearmon \n\nЧтобы показать/скрыть монитор, воспользуйтесь сочетанием клавиш <Control-m>. \n\nПодробное описание команд читайте в файле README.ru. \nЗайдите в Tkabber -> Настройки -> Plugins -> Bldjid, \nчтобы настроить плагин под ваши нужды."
+::msgcat::mcset ru "\nBan in all rooms where you have admin privileges: \n/bldjid JID \nSome reason for banning (optional). \n\nUnban a banned person in these rooms: \n/unbldjid JID \n\nUnban all people banned in the current room: \n/amnesty \n\nUnban people in the current room whose ban reason matches *some reason*: \n/amnesty some reason \n\nSearch for a pattern in the outcast list of the current room: \n/inbanlist pattern \n\nSearch for a pattern in the member list of the current room: \n/inmemberlist pattern \n\nShow all visitors of the current room: \n/visitors \n\nShow all visitors of rooms that match *room*: \n/visitors room \n\nShow visits made by someone whose nick matches *nick*: \n/visited nick \n\nShows visits made by *nick*, to the rooms that match *room*: \n/visited nick \nroom \n\nThe same fashion as previous, but looking for\ \njids, roles, affiliations and versions:\ \n/visited jid john\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nAn enhancement of the previous command that allows searching in log file:\ \n/visited log nick\ \n/visited log jid mylogin at jabberserver.org\ \nroom\ \n/visited log ver Gajim Version: 0.12.1 OS: Windows XP\ \n\nBan in all rooms where you have admin privileges: \n?n? means an item number from a list given by a /visit* command. \n/bldjid ?n? \nSome reason for banning (optional). \n\nClear the current monitor window: \n/clearmon \n\nTo toggle between Show and Close monitor states use <Control-m> shortcut. \n\nSee README file for more information. \nVisit Tkabber -> Customize -> Plugins -> Bldjid \nto tune the plugin for your needs." \
+"\nЗабанить во всех комнатах, где у вас есть админские права: \n/bldjid JID \nПричина бана (необязательна). \n\nРазбанить забаненного пользователя в таких комнатах: \n/unbldjid JID \n\nРазбанить всех забаненных в текущей комнате: \n/amnesty \n\nРазбанить в текущей комнате тех, чья причина бана подходит к *какая-то причина*: \n/amnesty какая-то причина \n\nИскать слово в чёрном списке текущей комнаты: \n/inbanlist pattern \n\nИскать слово в списке членов текущей комнаты: \n/inmemberlist pattern \n\nПоказать всех посетителей в текущей комнате: \n/visitors \n\nПоказать всех посетителей комнаты, название которой подходит к *room*: \n/visitors room \n\nПоказать визиты пользователя, чей ник подходит к *nick*: \n/visited nick \n\nПоказать визиты, сделанные *nick*, в комнаты, подходящие к *room*: \n/visited nick \nroom \n\nКак и в предыдущих двух случаях, но ищем джиды, роли, ранги и версии:\ \n/visited jid pupkin\ \n/visited role moder\ \n/visited aff none\ \n/visited ver Tkabber\ \n/visited ver Debian\ \n\nРасширение предыдущей команды, позволяющее искать в файле лога:\ \n/visited log nick \n/visited log jid mylogin at jabberserver.org\ \nroom\ \n/visited log ver Gajim Версия: 0.12.1 ОС: Windows XP\ \n\nЗабанить во всех комнатах, где у вас есть админские права: \n?n? означает номер в списке, выведенном по команде /visit*. \n/bldjid ?n? \nПричина бана (необязательна). \n\nОчистить текущее окно монитора: \n/clearmon \n\nЧтобы показать/скрыть монитор, воспользуйтесь сочетанием клавиш <Control-m>. \n\nПодробное описание команд читайте в файле README.ru. \nЗайдите в Tkabber -> Настройки -> Plugins -> Bldjid, \nчтобы настроить плагин под ваши нужды."
 ::msgcat::mcset ru "current room:" "текущую комнату:"
 ::msgcat::mcset ru "room %s:" "комнату %s:"
 ::msgcat::mcset ru "rooms that match *%s*:" "комнаты, названия которых подходят к *%s*:"



More information about the Tkabber-dev mailing list