TeamSpeak 3 Server Query Notify (servernotifyregister)
Hier geht es um die Events, über die man mit servernotifyregister
benachrichtigt wird.
Abonnements verschwinden auch, wenn man sich ausloggt, umloggt (auch selber Benutzer) oder auf einen anderen(!) oder keinen Server wechselt.
Abonnements müssen einzeln erstellt werden, Arrayparameter sind für den Parameter event nicht möglich. Der Quellkanal der einzelnen Events kann nicht herausgefunden werden. Die hier gemachten Unterscheidungen entstanden, indem sich mehrere Clients verbunden und jeweils andere Kanäle abonniert haben.
Werden einem die Rechte für Abonnements entzogen, bleiben bestehende Abonnements erhalten.
Inhaltsverzeichnis
Die Namen der abonnierbaren Kanäle sind auf der ersten Ebene, die Namen der von ihnen ausgelösten Events sind auf zweiter Ebene.
server und channel
Die hier genannten Events erhält man sowohl als Server- als auch als Channel-Event. Wenn man im entsprechenden Channel ist, erhält man also zweimal dasselbe Event.
notifycliententerview
Die Ausgabe ist ähnlich zu clientinfo
. Dazu kommen die notify-exklusiven ersten drei Felder für Benutzerbewegungen und das vor längerer Zeit aus clientinfo
gelöschte Feld client_unread_messages
.
cfid
(Quellchannel; „0“ beim Betreten des Servers)ctid
(Zielchannel)reasonid
(siehe Anhang)clid
client_unique_identifier
client_nickname
client_input_muted
client_output_muted
client_outputonly_muted
client_input_hardware
client_output_hardware
client_meta_data
(Query-Clients können hier mitclientupdate
für sich selbst während ihres Aufenthaltes etwas speichern, das war ursprünglich mal für die Kommunikation zwischen Plugins gedacht, was aber über einen Kanal läuft, auf den man per Query keinen Zugriff hat)client_is_recording
client_database_id
client_channel_group_id
client_servergroups
client_away
client_away_message
client_type
(„1“ für Query, „0“ für Voice)client_flag_avatar
client_talk_power
client_talk_request
client_talk_request_msg
client_description
client_is_talker
client_is_priority_speaker
client_unread_messages
(hier immer noch vorhanden, obwohl es ausclientinfo
längst gelöscht wurde)client_nickname_phonetic
client_needed_serverquery_view_power
(Änderung für Voice-Nutzer während einer Sitzung manchmal nicht rückwirkend, funktioniert jedoch bei Gruppenwechsel)client_icon_id
client_is_channel_commander
client_country
client_channel_group_inherited_channel_id
client_badges
(leer bei Query- und zu alten Clients, sonst in sich selbst parametrisierter String)
notifycliententerview
gibt jeden Client zurück, der sich auf den Server verbindet, selbst wenn man diese mit clientlist
nicht sehen könnte oder kann. Warum diese Formulierung? Tja, die Ausgabe bei clientlist
ist großes Chaos. Während ein Voice-Client alle Clients sieht, die er sehen soll (channel_needed_subscribe_power
) oder in deren Channel er ist, fällt letzteres für Query-Clients weg. Man sieht also nur Clients, deren Channel man abonnieren kann. Das gilt insbesondere für Query-Clients und insbesondere für sich selbst.
notifyclientleftview
cfid
ctid
(„0“ bei Verlassen)reasonid
(siehe Anhang)invokerid
(für Bans und Kicks)invokername
(für Bans und Kicks)invokeruid
(für Bans und Kicks)reasonmsg
bantime
(für Bans, Dauer in Sekunden)clid
(Array nicht möglich)
Dieses Event erhält man über sich selber und alle vor einem rausgeschmissenen, wenn der Server heruntergefahren wird. Nur über denjenigen, der den Server heruntergefahren hat, bekommen die anderen(!) reasonid=8 reasonmsg=deselected\svirtualserver
gesagt, er selbst bekommt das normale Event (wie alle anderen über alle anderen).
server
notifyserveredited
reasonid
(immer „10“)invokerid
invokername
invokeruid
Anschließend folgen die neuen Werte der Parameter, die geändert wurden. Aber Halt: Man wird nicht bei allen Parametern über den neuen Wert informiert. Das Event wird auch ausgelöst, wenn deshalb gar keine neuen Werte mitgeteilt werden können.
Über die neuen Werte folgender Eigenschaften wird man sofort mitinformiert:
virtualserver_name
virtualserver_codec_encryption_mode
virtualserver_default_server_group
virtualserver_default_channel_group
virtualserver_hostbanner_url
virtualserver_hostbanner_gfx_url
virtualserver_hostbanner_gfx_interval
virtualserver_priority_speaker_dimm_modificator
virtualserver_hostbutton_tooltip
virtualserver_hostbutton_url
virtualserver_hostbutton_gfx_url
virtualserver_name_phonetic
virtualserver_icon_id
virtualserver_hostbanner_mode
virtualserver_channel_temp_delete_delay_default
Für die passive Änderungen von virtualserver_ask_for_privelege_key
durchs Benutzen eines Tokens gibt es kein Event.
Man bekommt zwar die neue Standard-Server- und -Channel-Gruppe gesagt, nicht jedoch die Standard-Channeladmin-Gruppe...
channel
Der id
-Parameter ist bei event=channel
verpflichtend und überall sonst weder erforderlich noch wirksam, insbesondere auch bei event=textchannel
(man kann also nur seinem eigenen Channelchat lauschen). Der id
-Parameter muss nicht auf einen existierenden Channel zeigen. id=0
steht für alle bestehenden und neuen Channel.
Man kann nur ein Channel-Abo haben. Es gilt das erste, das man abonniert hat. Dies wird nur durch Verlassen des Servers oder servernotifyunregister zurückgesetzt. Insbesondere wird es nicht zurückgesetzt, wenn der Channel gelöscht wird. Arrays als Parameter sind nicht möglich. Beim Löschen eines Channels geht das Abonnement nicht verloren.
Es gibt beim Abonnieren eines bestimmten Channels kein Event fürs Erstellen eines Channels, selbst wenn man die zukünftige Channel-ID richtig rät. Eine richtig geratene ID des Channels informiert einen jedoch darüber, dass man selbst dorthin gegangen ist, wenn man selbst einen temporären Channel erstellt hat. Die Zeile steht zwischen der zurückgegebenen Channel-ID und dem Ergebnis der Funktion...
notifychanneldescriptionchanged und notifychannelpasswordchanged
cid
notifychanneledited
wird stets zusätzlich ausgelöst. Die Reihenfolge ist:
notifychanneledited
notifychanneldescriptionchanged
notifychannelpasswordchanged
Entgegen des Namens wird notifychannelpasswordchanged
nicht ausgelöst, wenn das Passwort geändert wird. Es wird nur ausgelöst, wenn das Passwort gesetzt oder entfernt wird. In dem Fall informiert notifychanneledited
über den neuen Wert von channel_flag_password
. Wird das Passwort geändert, wird notifychanneledited
ausgelöst und gibt, soweit es sonst nichts zu vermelden gibt, nur die Minimalparameter zurück.
Ebenso ohne weiteren Anlass nur mit Minimalparametern wird notifychanneldescriptionchanged
ausgelöst, wenn die Beschreibung geändert wird. Allerdings führt auch das Ändern der Beschreibung zu notifychanneldescriptionchanged
.
notifychannelmoved
notifychannelmoved
wird nur ausgelöst, wenn sich der Elternchannel ändert. Ändert sich der Elternchannel nicht, wird bei Verschiebungen notifychanneledited
ausgelöst. notifychanneledited
wird nicht ausgelöst, wenn sich Elternchannel und Sortierung ändern.
cid
cpid
order
reasonid
invokerid
invokername
invokeruid
Ändert sich die Reihenfolge eines Channels, weil ein anderer Channel vor ihn geschoben wird, ergibt das kein Event.
notifychanneledited
cid
reasonid
invokerid
invokername
invokeruid
Anschließend kommen die neuen Werte. Wie bereits erwähnt und auch zu erwarten, wird man nicht über die neuen Werte von channel_description
und channel_password
(wobei das eh nur ein Hash ist) informiert, jedoch über alle anderen, die da wären:
channel_name
channel_topic
channel_codec
channel_codec_quality
channel_maxclients
channel_maxfamilyclients
channel_order
channel_flag_permanent
channel_flag_semi_permanent
channel_flag_default
channel_flag_password
channel_codec_latency_factor
channel_codec_is_unencrypted
channel_delete_delay
channel_flag_maxclients_unlimited
channel_flag_maxfamilyclients_unlimited
channel_flag_maxfamilyclients_inherited
channel_needed_talk_power
channel_name_phonetic
channel_icon_id
channel_icon_id
bekommt, wenn man es mit dem offiziellen Client ändert, stets eine Extrawurst, wenn noch irgendwas anderes geändert wurde. Dann kommt es immer ganz am Ende, also auch noch nach Auslösung den beiden Sonder-Events. Das dürfte daran liegen, dass der offizielle Client das Icon über channelpermadd
ändert (gelöscht wird durch Setzen auf 0, nicht durch channelpermdel
), worüber man ebenfalls informiert wird. Ändert man channel_icon_id
über channeledit
zusammen mit anderen Werten, ergibt das nur ein Event notifychanneledited
.
Man wird, wie man oben sieht, nicht über das Ändern der Rechte informiert. Ausnahme ist channel_needed_talk_power
, was bei einer Änderung notifychanneledited
auslöst und damit zurückgegeben wird. Auch hier löst channelpermadd
das Event notifychanneledited
aus, allerdings bekommt channel_needed_talk_power
keine Extrawurst wie channel_icon_id
.
notifychanneledited
wird nicht ausgelöst, wenn dem Channel das Standard-Flag entzogen wird oder man die benötigten Rechte (außer wie erwähnt Talkpower) ändert (im offiziellen Client).
notifychannelcreated
Wie schon erwähnt wird das Event nur ausgelöst, wenn man alle Channel abonniert hat (id=0
).
cid
cpid
channel_name
channel_topic
channel_codec
channel_codec_quality
channel_maxclients
channel_maxfamilyclients
channel_order
channel_flag_permanent
channel_flag_semi_permanent
channel_flag_default
channel_flag_password
channel_codec_latency_factor
channel_codec_is_unencrypted
channel_delete_delay
channel_flag_maxclients_unlimited
channel_flag_maxfamilyclients_unlimited
channel_flag_maxfamilyclients_inherited
channel_needed_talk_power
channel_name_phonetic
channel_icon_id
invokerid
invokername
invokeruid
Setzt man ein Icon, wird dies erst nach der Erstellung des Channels mittels notifychanneledited
gesetzt.
notifychanneldeleted
invokerid
(„0“ bei Löschung eines temporären Channels durch den Server)invokername
(„Server“ bei Löschung eines temporären Channels durch den Server)invokeruid
(fehlt bei Löschung eines temporären Channels durch den Server)cid
Das Event wird nicht ausgelöst, wenn ein Elternchannel gelöscht wird und der abonnierte Channel dadurch mitgelöscht wird. Hat man alle Channel oder den zu löschenden Elternchannel abonniert, wird das Event ebenfalls nur für den Elternchannel ausgelöst.
notifyclientmoved
ctid
reasonid
(„0“ oder „1“; istclid
ein Array, ist dieser Wert pauschal „1“, auch wenn der schiebende Benutzer selbst dabei ist; zu den IDs siehe Anhang)invokerid
(wennreasonid
nicht „0“ ; „0“ bei Erstellung eines temporären Channels)invokername
(wennreasonid
nicht „0“ ; Server bei Erstellung eines temporären Channels)invokeruid
(wennreasonid
nicht „0“ ; fehlt bei Erstellung eines temporären Channels)clid
(Array möglich)
Wird ein Channel gelöscht, erhält man einen regulären Channelkick mit der Begründung reasonmsg=channel\sdeleted
.
Hat man alle Channel abonniert, erhält man jedes notifyclientmoved
zweimal.
textserver, textchannel, textprivate und Notifys die man gar nicht abonniert hat
gm
geht an textserver
.
Man erhält über Flüsternachrichten, die man verschickt, immer ein Notify, auch wenn man gar nichts abonniert hat.
notifytextmessage
targetmode
(„1“=privat, „2“=Channel, „3“=Server)msg
target
(clid
des Empfängers; Parameter nur beitextprivate
vorhanden)invokerid
(„0“ beigm
)invokername
(„Server“ beigm
)invokeruid
(fehlt beigm
; „serveradmin“ beim Nur-Query-Account, „ServerQuery“ bei Nachrichten von Query-Gästen)
Man kann sich selbst anschreiben und erhält auch sonst sämtliche selbst ausgelösten Events.
tokenused
Diese Event-Anmeldung ist nicht zentral dokumentiert. Das Event wurde von Enril1112 im Forum gewünscht.
notifytokenused
Tritt auf, wenn ein Token benutzt wird.
clid
cldbid
cluid
token
tokencustomset
token1
(Gruppe)token2
(„0“ bei Servertoken)
Ausdrücklich nicht dabei sind tokendescription
und tokentype
. Letzteres kann man sich aber erschließen, indem man prüft, ob token2
auf 0 steht.
Anhang
reasonid
ID | Bedeutung |
---|---|
0 | selbstständig Channel gewechselt oder Server betreten |
1 | Benutzer oder Channel verschoben |
3 | Timeout |
4 | Channel-Kick |
5 | Server-Kick |
6 | Ban |
8 | freiwillig den Server verlassen |
10 | Server oder Channel bearbeitet |
11 | Serverabschaltung |