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

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Wed Mar 24 21:19:19 MSK 2010


Author: bigote
Date: 2010-03-24 21:19:19 +0300 (Wed, 24 Mar 2010)
New Revision: 324

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:
A new set of commands added that allows you to watch certain jids entrances and nick changes, and also to manage your watchlist. These are:
/watch someuser at someserver.com
/unwatch someuser at someserver.com
/unwatch all
/listwatch
Please see README or use /bldhelp for more details.


Modified: trunk/plugins/bldjid/ChangeLog
===================================================================
--- trunk/plugins/bldjid/ChangeLog	2010-03-24 01:47:47 UTC (rev 323)
+++ trunk/plugins/bldjid/ChangeLog	2010-03-24 18:19:19 UTC (rev 324)
@@ -1,5 +1,21 @@
 2010-03-24  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
 
+--- Version 0.9.9 of the plugin.
+
+--- Files modified:
+    bldjid.tcl, ChangeLog, README, README.ru, msgs/ru.msg.
+
+--- Changes:
+	A new set of commands added that allows you to watch certain jids
+	entrances and nick changes, and also to manage your watchlist. These are:
+	/watch someuser at someserver.com
+	/unwatch someuser at someserver.com
+	/unwatch all
+	/listwatch
+	Please see README or use /bldhelp for more details.
+
+2010-03-24  Serge Yudin  <xmpp:bigote at jabber.ru> <mailto:bigote at gmail.com>
+
 --- Version 0.9.8 of the plugin.
 
 --- Files modified:

Modified: trunk/plugins/bldjid/README
===================================================================
--- trunk/plugins/bldjid/README	2010-03-24 01:47:47 UTC (rev 323)
+++ trunk/plugins/bldjid/README	2010-03-24 18:19:19 UTC (rev 324)
@@ -113,6 +113,22 @@
 	use the command:
 /clearmon
 
+--- You can set one or several jids to be watched their entrance or nick change.
+	Of course you have to be a moderator to be able to see visitors' real jids.
+	Just use the following command:
+/watch someuser at someserver.com
+	You can put several jids on the same line separating them by spaces
+	but please note they have to be bare jids, without resources.
+	You can delete a jid from your watchlist using this command:
+/unwatch a_user at server.org
+	The following command clears the list:
+/unwatch all
+	To show the list use the command:
+/listwatch
+	REMEMBER that the option ::plugins::bldjid::options(rooms2log)
+	affects notification: the plugin will only check entrances of watched jids
+	to the rooms you have specified in this option! (See its description below.)
+
 --- Autocompletion works for all these commands: write a couple
 	of the first letters of a command and hit TAB one of more times.
 -	Autocompletion also works in the same way for matching JIDs and nicks

Modified: trunk/plugins/bldjid/README.ru
===================================================================
--- trunk/plugins/bldjid/README.ru	2010-03-24 01:47:47 UTC (rev 323)
+++ trunk/plugins/bldjid/README.ru	2010-03-24 18:19:19 UTC (rev 324)
@@ -117,6 +117,22 @@
 	последнего поиска не пропадут), воспользуйтесь командой:
 /clearmon
 
+--- Вы можете указать один или несколько джидов, чтобы плагин извещал вас
+	об их заходах или смене ника. Естественно, вы должны быть модератором.
+	Для этого воспользуйтесь командой:
+/watch someuser at someserver.com
+	Вы можете указать несколько джидов, разделяя их пробелами,
+	но помните, что это должны быть "голые" джиды, без ресурса.
+	Вы можете удалить какой-нибудь джид из списка с помощью этой команды:
+/unwatch a_user at server.org
+	Следующая команда очищает список полностью:
+/unwatch all
+	Чтобы показать список наблюдения, наберите:
+/listwatch
+	ПОМНИТЕ, что настройка ::plugins::bldjid::options(rooms2log)
+	влияет на извещения: плагин будет извещать вас о заходах наблюдаемых джидов
+	только в комнаты, указанные в этой настройке! (См. её описание ниже.)
+
 --- Для всех этих команд работает автодополнение:
 	напишите первые несколько букв команды и понажимайте клавишу табуляции.
 -	Точно так же автодополнение работает для джидов, если вы дописываете их вручную

Modified: trunk/plugins/bldjid/bldjid.tcl
===================================================================
--- trunk/plugins/bldjid/bldjid.tcl	2010-03-24 01:47:47 UTC (rev 323)
+++ trunk/plugins/bldjid/bldjid.tcl	2010-03-24 18:19:19 UTC (rev 324)
@@ -1,4 +1,4 @@
-# "Bldjid" plugin for Tkabber. 2010-03-24 v. 0.9.8
+# "Bldjid" plugin for Tkabber. 2010-03-24 v. 0.9.9
 # Written by Serge Yudin xmpp:bigote at jabber.ru
 # See README or README.ru file for usage.
 
@@ -103,6 +103,7 @@
 proc bldjid::load {} {
 # A variable where the last query result is stored.
 	variable user_list
+	variable watched_jids
 # An array where all user entrances are stored.
 	global jids_by_chats
 	variable ent_cntr 1
@@ -139,6 +140,7 @@
 	catch {unset user_list}
 	catch {unset jids_by_chats}
 	catch {unset ver_os}
+	catch {unset watched_jids}
 
 	foreach chatid [chat::opened] {
 		clear_monitor $chatid
@@ -164,6 +166,7 @@
 ## Adapted to bldjid's necessities by Serge Yudin
 proc bldjid::smart_enter_exit_message {chatid nick} {
 	variable ent_cntr
+	variable watched_jids
 	global jids_by_chats
 	variable options
 	if {!$options(enable_jids_gathering)} {
@@ -190,9 +193,14 @@
 			set ts [clock format [clock seconds] \
 				-format $::plugins::options(timestamp_format)]
 			set real_jid [::muc::get_real_jid $xlib $group/$nick]
+			set bare_jid [::xmpp::jid::stripResource $real_jid]
 			if {$options(strip_resource)} {
-				set real_jid [::xmpp::jid::stripResource $real_jid]
+				set real_jid $bare_jid
 			}
+			if {[info exists watched_jids] \
+			&&  [string match -nocase *$bare_jid* $watched_jids]} {
+				[namespace current]::notify_jid $bare_jid $group $nick
+			}
 			if {[info exists jids_by_chats($group)]} {
 				if {$options(verbosity_level) == "min"} {
 					foreach item $jids_by_chats($group) {
@@ -261,7 +269,8 @@
 
 	if {!$wordstart} {
 		lappend comps {/bldjid } {/unbldjid } {/inbanlist } {/inmemberlist } \
-		{/amnesty } {/visitors } {/visited } {/bldhelp } {/clearmon }
+		{/amnesty } {/visitors } {/visited } {/bldhelp } {/clearmon } \
+		{/watch } {/unwatch } {/listwatch }
 	}
 
 	if {$wordstart && [regexp {^/(bldjid|unban|unbldjid).*} $line]} {
@@ -282,6 +291,7 @@
 
 proc bldjid::handle_commands {chatid user body type} {
 	set no_jid [::msgcat::mc "I can't see any JID of this user."]
+	variable watched_jids
 
 # Detect the command.
 	if {[string match {/bldjid*} $body]} {
@@ -302,6 +312,12 @@
 		set cmd /bldhelp
 	} elseif {[string match {/clearmon*} $body]} {
 		set cmd /clearmon
+	} elseif {[string match {/watch*} $body]} {
+		set cmd /watch
+	} elseif {[string match {/unwatch*} $body]} {
+		set cmd /unwatch
+	} elseif {[string match {/listwatch*} $body]} {
+		set cmd /listwatch
 	} else return
 
 	if {$type != "groupchat"} return
@@ -339,6 +355,12 @@
 		[namespace current]::help $chatid $group
 	} elseif {[string equal [string range $body 0 8] "/clearmon"]} {
 		[namespace current]::clear_monitor $chatid
+	} elseif {[string equal [string range $body 0 6] "/watch "]} {
+		set jid [::plugins::muc::parse_nick $body 7]
+	} elseif {[string equal [string range $body 0 8] "/unwatch "]} {
+		set jid [::plugins::muc::parse_nick $body 9]
+	} elseif {[string equal [string range $body 0 9] "/listwatch"]} {
+		[namespace current]::listwatch $chatid $group
 	} else {
 		return stop
 	}
@@ -424,10 +446,43 @@
 			[namespace current]::request_list $attr $val $chatid \
 			[list inmemberlist $jid]
 		}
+
+		/watch {
+			set jid [split $jid \ ]
+			foreach j $jid {
+				lappend watched_jids $j
+			}
+		}
+
+		/unwatch {
+			if {[info exists watched_jids]} {
+				if {$jid == "all"} {
+					catch {unset watched_jids}
+				} else {
+					for {set i 0} {$i < [llength $watched_jids]} {incr i} {
+						if {[string match -nocase $jid [lindex $watched_jids $i]]} {
+							set watched_jids [lreplace $watched_jids $i $i]
+							break
+						}
+					}
+				}
+			}
+		}
 	}
 	return stop
 }
 
+proc bldjid::listwatch {chatid group} {
+	variable watched_jids
+	set header [::msgcat::mc "These are jids you are watching:\n"]
+	if {[info exists watched_jids] && $watched_jids != ""} {
+		set msg $watched_jids
+	} else {
+		set msg [::msgcat::mc "Your watchlist is empty."]
+	}
+	[namespace current]::print_search_res $chatid $group $header $msg
+}
+
 proc bldjid::send_ban_request {xlib group params jid reason} {
 	set itemsubtags {}
 	if {$reason != ""} {
@@ -948,6 +1003,13 @@
 	\nSome reason for banning (optional).\
 	\n\nClear the current monitor window:\
 	\n/clearmon\
+	\n\nSet a list of jids (or add new ones) to watch their entrance in your rooms:\
+	\n/watch JID1 JID2 JID3\
+	\n\nDelete a jid (or all jids) from your watchlist:\
+	\n/unwatch JID\
+	\n/unwatch all\
+	\n\nShow your watchlist:\
+	\n/listwatch\
 	\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\
@@ -1142,6 +1204,23 @@
 	}
 }
 
+proc bldjid::notify_jid {jid room nick} {
+	variable winid
+	set w .notify_jid$winid
+	incr winid
+	if {[winfo exists $w]} {
+		destroy $w
+	}
+	set msg [::msgcat::mc "%s has entered the room %s as %s" $jid $room $nick]
+    Dialog $w -title [::msgcat::mc "Entrance Notify"] \
+        -modal none -separator 1 -anchor e -default 0 -parent .
+        set f [$w getframe]
+        $w add -text [::msgcat::mc "OK"] -command "destroy $w"
+        label $w.lsure -padx 10 -pady 5 -text $msg
+        pack $w.lsure -expand yes -fill both
+        $w draw
+}
+
 # Taken from Antispam plugin
 proc bldjid::log_msg {msg} {
     variable options

Modified: trunk/plugins/bldjid/msgs/ru.msg
===================================================================
--- trunk/plugins/bldjid/msgs/ru.msg	2010-03-24 01:47:47 UTC (rev 323)
+++ trunk/plugins/bldjid/msgs/ru.msg	2010-03-24 18:19:19 UTC (rev 324)
@@ -58,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\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\ \nAnd even combining different search parameters! (ver should be the last one):\ \n/visited log nick bigote aff owner ver Tkabber Version: 0.11.1-svn-20100223\ \nfoo at conf\ \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Можно даже комбинировать несколько поисковых запросов! (ver должен быть последним параметром):\ \n/visited log nick bigote aff owner ver Tkabber Версия: 0.11.1-svn-20100223\ \nfoo at conf\ \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\ \nAnd even combining different search parameters! (ver should be the last one):\ \n/visited log nick bigote aff owner ver Tkabber Version: 0.11.1-svn-20100223\ \nfoo at conf\ \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\nSet a list of jids (or add new ones) to watch their entrance in your rooms: \n/watch JID1 JID2 JID3 \n\nDelete a jid (or all jids) from your watchlist: \n/unwatch JID\ \n/unwatch all \n\nShow your watchlist: \n/listwatch \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Можно даже комбинировать несколько поисковых запросов! (ver должен быть последним параметром):\ \n/visited log nick bigote aff owner ver Tkabber Версия: 0.11.1-svn-20100223\ \nfoo at conf\ \n\nЗабанить во всех комнатах, где у вас есть админские права: \n?n? означает номер в списке, выведенном по команде /visit*. \n/bldjid ?n? \nПричина бана (необязательна). \n\nОчистить текущее окно монитора: \n/clearmon \n\nУстановить список джидов (или добавить новых) для отслеживания их заходов в ваши комнаты: \n/watch JID1 JID2 JID3 \n\nУдалить джид (или все джиды) из вашего списка наблюдения: \n/unwatch JID\ \n/unwatch all \n\nПоказать список наблюдения: \n/listwatch \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*:"
@@ -84,3 +84,7 @@
 "Тайм-аут для запроса версии (в секундах). Читайте описание опции в файле README.ru."
 ::msgcat::mcset ru "A list of conferences (full jids separated with spaces) that should be logged. If empty, all rooms will be logged." \
 "Список конференций (полные джиды, разделённые пробелами), логи которых вы хотите вести. Если поле пустое, будут вестись логи всех конференций."
+::msgcat::mcset ru "These are jids you are watching:\n" "Вы наблюдаете за следующими джидами:\n"
+::msgcat::mcset ru "Your watchlist is empty." "Список наблюдения пуст."
+::msgcat::mcset ru "%s has entered the room %s as %s" "%s вошёл в комнату %s под ником %s"
+::msgcat::mcset ru "Entrance Notify" "Уведомление о входе пользователя"



More information about the Tkabber-dev mailing list