TeamSpeak 3 Server Query Notify (servernotifyregister)

(Bildquelle: projectcartoon.com)
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)clidclient_unique_identifierclient_nicknameclient_input_mutedclient_output_mutedclient_outputonly_mutedclient_input_hardwareclient_output_hardwareclient_meta_data(Query-Clients können hier mitclientupdatefü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_recordingclient_database_idclient_channel_group_idclient_servergroupsclient_awayclient_away_messageclient_type(„1“ für Query, „0“ für Voice)client_flag_avatarclient_talk_powerclient_talk_requestclient_talk_request_msgclient_descriptionclient_is_talkerclient_is_priority_speakerclient_unread_messages(hier immer noch vorhanden, obwohl es ausclientinfolängst gelöscht wurde)client_nickname_phoneticclient_needed_serverquery_view_power(Änderung für Voice-Nutzer während einer Sitzung manchmal nicht rückwirkend, funktioniert jedoch bei Gruppenwechsel)client_icon_idclient_is_channel_commanderclient_countryclient_channel_group_inherited_channel_idclient_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
cfidctid(„0“ bei Verlassen)reasonid(siehe Anhang)invokerid(für Bans und Kicks)invokername(für Bans und Kicks)invokeruid(für Bans und Kicks)reasonmsgbantime(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“)invokeridinvokernameinvokeruid
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_namevirtualserver_codec_encryption_modevirtualserver_default_server_groupvirtualserver_default_channel_groupvirtualserver_hostbanner_urlvirtualserver_hostbanner_gfx_urlvirtualserver_hostbanner_gfx_intervalvirtualserver_priority_speaker_dimm_modificatorvirtualserver_hostbutton_tooltipvirtualserver_hostbutton_urlvirtualserver_hostbutton_gfx_urlvirtualserver_name_phoneticvirtualserver_icon_idvirtualserver_hostbanner_modevirtualserver_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:
notifychanneleditednotifychanneldescriptionchangednotifychannelpasswordchanged
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.
cidcpidorderreasonidinvokeridinvokernameinvokeruid
Ändert sich die Reihenfolge eines Channels, weil ein anderer Channel vor ihn geschoben wird, ergibt das kein Event.
notifychanneledited
cidreasonidinvokeridinvokernameinvokeruid
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_namechannel_topicchannel_codecchannel_codec_qualitychannel_maxclientschannel_maxfamilyclientschannel_orderchannel_flag_permanentchannel_flag_semi_permanentchannel_flag_defaultchannel_flag_passwordchannel_codec_latency_factorchannel_codec_is_unencryptedchannel_delete_delaychannel_flag_maxclients_unlimitedchannel_flag_maxfamilyclients_unlimitedchannel_flag_maxfamilyclients_inheritedchannel_needed_talk_powerchannel_name_phoneticchannel_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).
cidcpidchannel_namechannel_topicchannel_codecchannel_codec_qualitychannel_maxclientschannel_maxfamilyclientschannel_orderchannel_flag_permanentchannel_flag_semi_permanentchannel_flag_defaultchannel_flag_passwordchannel_codec_latency_factorchannel_codec_is_unencryptedchannel_delete_delaychannel_flag_maxclients_unlimitedchannel_flag_maxfamilyclients_unlimitedchannel_flag_maxfamilyclients_inheritedchannel_needed_talk_powerchannel_name_phoneticchannel_icon_idinvokeridinvokernameinvokeruid
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
ctidreasonid(„0“ oder „1“; istclidein Array, ist dieser Wert pauschal „1“, auch wenn der schiebende Benutzer selbst dabei ist; zu den IDs siehe Anhang)invokerid(wennreasonidnicht „0“ ; „0“ bei Erstellung eines temporären Channels)invokername(wennreasonidnicht „0“ ; Server bei Erstellung eines temporären Channels)invokeruid(wennreasonidnicht „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)msgtarget(cliddes Empfängers; Parameter nur beitextprivatevorhanden)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.
clidcldbidcluidtokentokencustomsettoken1(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 |