PS-Bot – Ein Teamspeak3 Query Bot
by onitzsche · 23. April 2023
Server und Bot Identität vorbereiten
Verbindung vom Webservice Whitelisten
Damit die Bot-Query-Verbindung auf deinem TS-Server zugelassen wird und diese nicht als „flooding error“ erkannt wird, muss die Webservice IP Adresse des Webinterfaces in die Whitelist des Teamspeak Servers aufgenommen werden. Wir benötigen zudem noch eine angepasste Teamspeak Identität für diesen Bot damit Ihr den Bot auch sicher betreiben könnt (safety first). Dies funktioniert ganz einfach. Wir gehen das Setup Schritt für Schritt durch.
Webservice Whitelisten
Für Nutzer mit eigenem Root Server
Gehe in das Verzeichnis in dem dein Teamspeak Server liegt.
In diesem Verzeichnis findest du eine Text Datei mit dem Namen query_ip_allowlist.txt (1).
Füge hier folgende IP Adresse hinzu: 80.147.25.186 und speichere die Änderung. Ab jetzt löst der Query Bot keinen „flooding error“ mehr aus.
Für Nutzer mit keinem eigenen Root Server
Solltest du keinen Zugriff auf das Verzeichnis haben, dann ist es in der Regel möglich diese Listen via Webinterface zu bearbeiten und hier die IP Adresse einzutragen.
Bot Servergruppe einrichten
Erstelle eine neue Servergruppe mit der Bezeichnung psbot, bot oder einen Namen deiner Wahl.
In der folgenden Liste haben wir euch alle benötigten Rechte (150) aufgelistet welche der PS-Bot für den sicheren Betrieb benötigt.
Ihr könnt diese Einstellungen am einfachsten mit YaTQA als serveradmin setzen. Auf Anfrage können wir euch auch eine CSV mit den Rechten zur Verfügung stellen welche einfach via YaTQA auf die Servergruppe Importiert werden kann.
Recht | Wert | Skip | Negiert | Vergabe |
---|---|---|---|---|
b_channel_create_child | 1 | 0 | 0 | |
b_channel_create_modify_with_codec_opusmusic | 1 | 0 | 0 | |
b_channel_create_modify_with_codec_opusvoice | 1 | 0 | 0 | |
b_channel_create_permanent | 1 | 0 | 0 | |
b_channel_create_semi_permanent | 1 | 0 | 0 | |
b_channel_create_temporary | 1 | 0 | 0 | |
b_channel_create_with_description | 1 | 0 | 0 | |
b_channel_create_with_maxclients | 1 | 0 | 0 | |
b_channel_create_with_maxfamilyclients | 1 | 0 | 0 | |
b_channel_create_with_needed_talk_power | 1 | 0 | 0 | |
b_channel_create_with_password | 1 | 0 | 0 | |
b_channel_create_with_sortorder | 1 | 0 | 0 | |
b_channel_create_with_topic | 1 | 0 | 0 | |
b_channel_delete_flag_force | 1 | 0 | 0 | |
b_channel_delete_permanent | 1 | 0 | 0 | |
b_channel_delete_semi_permanent | 1 | 0 | 0 | |
b_channel_delete_temporary | 1 | 0 | 0 | |
b_channel_info_view | 1 | 0 | 0 | |
b_channel_join_ignore_maxclients | 1 | 0 | 0 | |
b_channel_join_ignore_password | 1 | 0 | 0 | |
b_channel_join_permanent | 1 | 0 | 0 | |
b_channel_join_semi_permanent | 1 | 0 | 0 | |
b_channel_join_temporary | 1 | 0 | 0 | |
b_channel_modify_banner | 1 | 0 | 0 | |
b_channel_modify_codec | 1 | 0 | 0 | |
b_channel_modify_codec_latency_factor | 1 | 0 | 0 | |
b_channel_modify_codec_quality | 1 | 0 | 0 | |
b_channel_modify_description | 1 | 0 | 0 | |
b_channel_modify_make_codec_encrypted | 1 | 0 | 0 | |
b_channel_modify_make_permanent | 1 | 0 | 0 | |
b_channel_modify_make_semi_permanent | 1 | 0 | 0 | |
b_channel_modify_make_temporary | 1 | 0 | 0 | |
b_channel_modify_maxclients | 1 | 0 | 0 | |
b_channel_modify_maxfamilyclients | 1 | 0 | 0 | |
b_channel_modify_name | 1 | 0 | 0 | |
b_channel_modify_needed_talk_power | 1 | 0 | 0 | |
b_channel_modify_parent | 1 | 0 | 0 | |
b_channel_modify_password | 1 | 0 | 0 | |
b_channel_modify_sortorder | 1 | 0 | 0 | |
b_channel_modify_temp_delete_delay | 1 | 0 | 0 | |
b_channel_modify_topic | 1 | 0 | 0 | |
b_client_avatar_delete_other | 1 | 0 | 0 | |
b_client_ban_create | 1 | 0 | 0 | |
b_client_ban_delete | 1 | 0 | 0 | |
b_client_ban_delete_own | 1 | 0 | 0 | |
b_client_ban_list | 1 | 0 | 0 | |
b_client_channel_textmessage_send | 1 | 0 | 0 | |
b_client_complain_delete | 1 | 0 | 0 | |
b_client_complain_delete_own | 1 | 0 | 0 | |
b_client_complain_list | 1 | 0 | 0 | |
b_client_create_modify_serverquery_login | 1 | 0 | 0 | |
b_client_custom_info_view | 1 | 0 | 0 | |
b_client_delete_dbproperties | 1 | 0 | 0 | |
b_client_ignore_antiflood | 1 | 0 | 0 | |
b_client_ignore_bans | 1 | 0 | 0 | |
b_client_ignore_sticky | 1 | 0 | 0 | |
b_client_info_view | 1 | 0 | 0 | |
b_client_modify_dbproperties | 1 | 0 | 0 | |
b_client_modify_description | 1 | 0 | 0 | |
b_client_modify_own_description | 1 | 0 | 0 | |
b_client_offline_textmessage_send | 1 | 0 | 0 | |
b_client_permissionoverview_own | 1 | 0 | 0 | |
b_client_permissionoverview_view | 1 | 0 | 0 | |
b_client_remoteaddress_view | 1 | 0 | 0 | |
b_client_request_talker | 1 | 0 | 0 | |
b_client_server_textmessage_send | 1 | 0 | 0 | |
b_client_set_flag_talker | 1 | 0 | 0 | |
b_client_skip_channelgroup_permissions | 1 | 0 | 0 | |
b_client_use_channel_commander | 1 | 0 | 0 | |
b_client_use_reserved_slot | 1 | 0 | 0 | |
b_ft_transfer_list | 1 | 0 | 0 | |
b_group_is_permanent | 1 | 0 | 0 | |
b_icon_manage | 1 | 0 | 0 | |
b_virtualserver_channel_list | 1 | 0 | 0 | |
b_virtualserver_channel_permission_list | 1 | 0 | 0 | |
b_virtualserver_channel_search | 1 | 0 | 0 | |
b_virtualserver_channelgroup_client_list | 1 | 0 | 0 | |
b_virtualserver_channelgroup_delete | 1 | 0 | 0 | |
b_virtualserver_channelgroup_list | 1 | 0 | 0 | |
b_virtualserver_client_dbinfo | 1 | 0 | 0 | |
b_virtualserver_client_dblist | 1 | 0 | 0 | |
b_virtualserver_client_dbsearch | 1 | 0 | 0 | |
b_virtualserver_client_list | 1 | 0 | 0 | |
b_virtualserver_client_permission_list | 1 | 0 | 0 | |
b_virtualserver_client_search | 1 | 0 | 0 | |
b_virtualserver_connectioninfo_view | 1 | 0 | 0 | |
b_virtualserver_custom_search | 1 | 0 | 0 | |
b_virtualserver_info_view | 1 | 0 | 0 | |
b_virtualserver_join_ignore_password | 1 | 0 | 0 | |
b_virtualserver_modify_hostbanner | 1 | 0 | 0 | |
b_virtualserver_notify_register | 1 | 0 | 0 | |
b_virtualserver_notify_unregister | 1 | 0 | 0 | |
b_virtualserver_permission_find | 1 | 0 | 0 | |
b_virtualserver_servergroup_client_list | 1 | 0 | 0 | |
b_virtualserver_servergroup_delete | 1 | 0 | 0 | |
b_virtualserver_servergroup_list | 1 | 0 | 0 | |
i_channel_create_modify_with_codec_latency_factor_min | 1 | 0 | 0 | |
i_channel_create_modify_with_codec_maxquality | 10 | 0 | 0 | |
i_channel_delete_power | 75 | 0 | 0 | |
i_channel_description_view_power | 75 | 0 | 0 | |
i_channel_join_power | 75 | 0 | 0 | |
i_channel_max_depth | 10 | 0 | 0 | |
i_channel_modify_power | 75 | 0 | 0 | |
i_channel_needed_delete_power | 75 | |||
i_channel_needed_description_view_power | 75 | |||
i_channel_needed_join_power | 75 | |||
i_channel_needed_modify_power | 75 | |||
i_channel_needed_permission_modify_power | 75 | |||
i_channel_needed_subscribe_power | 75 | |||
i_channel_permission_modify_power | 75 | 0 | 0 | |
i_channel_subscribe_power | 75 | 0 | 0 | |
i_client_ban_max_bantime | -1 | 0 | 0 | |
i_client_ban_power | 75 | 0 | 0 | |
i_client_complain_power | 75 | 0 | 0 | |
i_client_kick_from_channel_power | 75 | 0 | 0 | |
i_client_kick_from_server_power | 75 | 0 | 0 | |
i_client_max_avatar_filesize | 200000 | 0 | 0 | |
i_client_max_channel_subscriptions | -1 | 0 | 0 | |
i_client_max_clones_uid | 10 | 0 | 0 | |
i_client_move_power | 75 | 0 | 0 | |
i_client_needed_ban_power | 75 | 0 | 0 | |
i_client_needed_complain_power | 75 | 0 | 0 | |
i_client_needed_kick_from_channel_power | 75 | 0 | 0 | |
i_client_needed_kick_from_server_power | 75 | 0 | 0 | |
i_client_needed_move_power | 75 | 0 | 0 | |
i_client_needed_permission_modify_power | 75 | 0 | 0 | 75 |
i_client_needed_serverquery_view_power | 75 | 0 | 0 | 75 |
i_client_needed_talk_power | 75 | |||
i_client_needed_whisper_power | 75 | 0 | 0 | |
i_client_permission_modify_power | 75 | 0 | 0 | |
i_client_poke_power | 75 | 0 | 0 | |
i_client_private_textmessage_power | 75 | 0 | 0 | |
i_client_serverquery_view_power | 75 | 0 | 0 | |
i_client_talk_power | 75 | 0 | 0 | |
i_ft_needed_directory_create_power | 75 | |||
i_ft_needed_file_browse_power | 75 | |||
i_ft_needed_file_delete_power | 75 | |||
i_ft_needed_file_download_power | 75 | |||
i_ft_needed_file_rename_power | 75 | |||
i_ft_needed_file_upload_power | 75 | |||
i_group_auto_update_max_value | 45 | 0 | 0 | |
i_group_auto_update_type | 45 | 0 | 0 | |
i_group_member_add_power | 75 | 0 | 0 | |
i_group_member_remove_power | 75 | 0 | 0 | |
i_group_modify_power | 75 | 0 | 0 | |
i_group_needed_member_add_power | 75 | 0 | 0 | |
i_group_needed_member_remove_power | 75 | 0 | 0 | |
i_group_needed_modify_power | 75 | 0 | 0 | |
i_group_sort_id | 2 | 0 | 0 | |
i_permission_modify_power | 75 | 0 | 0 |
Teamspeak Bot Identität erstellen
Starte den Teamspeak3 Client und erstelle dir eine neue Identität. Diese kannst du über Extras (1) – Identitäten (2) erstellen. Drücke dazu auf Erstellen (3) und gib als Identität Name (4) sowie als Nickname (5) psbot ein. Anschließend mit OK (6) bestätigen. Jetzt verbinde dich mit mit dieser identität zu deinem Server. Ob die Identität verwendet wird erkennst du an der Fett markierten Schriftart.
Vergib nun die Bot Servergruppe an die Bot Identität. Die Bot Identität (7) ist jetzt in der Bot Servergruppe (8). Jetzt kann mit dieser Identität ein neuer ServerQuery Login (9) erstellt werden. Den Namen welchen du eingeben musst ist dein Query Login Name. Das Passwort dazu wird automatisch generiert.
SPEICHERE DEN LOGIN NAMEN UND DAS PASSWORT
Verlasse den Server wieder und ändere deine Identität wieder zu deiner bisher genutzten Identität. Die Bot Identität wird, in der Regel, jetzt nicht mehr gebraucht. Dein Server kennt jetzt diese Identität.
Das Webinterface
Bot Verify Server Gruppe (Wegwerfgruppe)
Da wir Wert drauf legen Missbrauch zu vermeiden, muss nach der Eingabe der Serverdaten der Bot verifiziert werden. Dazu benötigt der Bot eine Servergruppe die exakt „Server Admin“ heißt. Solltet Ihr diese Gruppe nicht haben könnt Ihr diese ohne jegliche Rechte einfach schnell anlegen und an euch vergeben. Der Bot sendet einen Verifizierungscode an diese Gruppe welcher im Webinterface bestätigt werden muss.Solltet Ihr diese Gruppe aktiv nutzen, erhalten alle Clients in dieser Gruppe diesen Code, diese sind ja alle Server Admins 😉
Danach kann die Gruppe wieder gelöscht werden.
Zugangsdaten und Serververbindung
Nachdem du dich Registriert und eingeloggt hast kannst du deinen Server hinzufügen. Wir benötigen jetzt den Query Login Namen und das Passwort welches wir im vorhergehenden Schritt erstellt haben.
Gib jetzt also deine Daten ein:
Servername = Beliebiger Name deiner Wahl
IPv4 Adresse = Die IP Adresse unter welcher dein Server erreichbar ist
Query Admin = Query Login Namen (Diesen haben wir im obigen Kapitel erstellt)
Query Admin Passwort = Das Passwort welches beim erstellen des Query Admin Logins erstellt wurde
Query Port = Kann leer gelassen werden wenn der Standard benutzt wird. Wird ein anderer Port verwendet muss dieser hier eingetragen werden
Server Port = Kann leer gelassen werden wenn der Standard benutzt wird. Wird ein anderer Port verwendet muss dieser hier eingetragen werden
Query Nickname = Name wie der Bot auf euren Server in den Serverlogs angzeigt werden soll
Beschreibung = Internes Beschreibungsfeld für den eigengebrauch
Wenn bis hierhin alles Richtig gemacht wurde erhälst du eine Textnachricht mit dem Verifizierungscode vom Bot. Gib diesen ein.
Wenn dieser korrekt ist, dann wird jetzt dein Server initialisiert und kommst in das Control Bot Center.
Troubleshooting
Es erscheint eine Fehlermeldung mit „Bot is flooding“ dann fehlen dem Bot entweder Rechte oder wurde nicht in die Whitelist eingetragen.
Weiterentwicklung für 2024 geplant
Das Projekt steht auch für 2024 weiter in der Entwicklungsplanung. Ich habe mich hier entschlossen dieses Projekt auf Open Source umzustellen. Damit einhergehend sind allerdings einige Änderungen notwendig welche ich sobald wie möglich umsetzen werde. Danach wird das Projekt auf Github verfügbar sein.