TheHolyWaffle / TeamSpeak-3-Java-API

A Java wrapper of TeamSpeak's 3 server query API.
MIT License
306 stars 107 forks source link

Something isn't working... #331

Closed ghost closed 5 years ago

ghost commented 5 years ago

I have been trying for hours to write a bot, which should assign a set group when it receives a specific message. The problem is that the bot seems to have problems with the ClientDatabaseId. Here is the associated code and the console log:

Code: (Main)

`package de.ragecraft;

import com.github.theholywaffle.teamspeak3.TS3Api; import com.github.theholywaffle.teamspeak3.TS3Config; import com.github.theholywaffle.teamspeak3.TS3Query;

public class Main {

public static final TS3Config config = new TS3Config();
public static final TS3Query query = new TS3Query(config);
public static final TS3Api api = query.getApi();
public static String prefix = "[COLOR=#888888][[/COLOR][COLOR=#ffaa00]System[/COLOR][COLOR=#888888]][/COLOR] ";
public static String information = "[COLOR=#888888][[/COLOR][COLOR=#ff5500]Information[/COLOR][COLOR=#888888]][/COLOR] ";

public static void main(String[] args) {

    System.out.println("Der Info-Bot wird gestartet...");
    System.out.println("Der Info-Bot wird mit dem Teamspeak-3-Server verbunden...");
    config.setHost("xxx.de");
    query.connect();
    api.login("Info-Bot", "xxxxx");
    api.selectVirtualServerById(1);
    api.setNickname("Info-Bot");
    System.out.println("Der Info-Bot wurde erfolgreich mit dem Teamspeak-3-Server verbunden!");
    System.out.println("Der Startvorgang wird abgeschlossen...");
    api.sendServerMessage(Main.prefix + "[color=blue]Der Startvorgang wird abgeschlossen...[/color]");
    System.out.println("Die Systeme werden geladen...");
    api.sendServerMessage(Main.prefix + "[color=blue]Die Systeme werden geladen...[/color]");
    api.sendServerMessage(Main.prefix + "[color=blue]Lade System 1/1...[/color]");
    Events.loadEvents();
    api.sendServerMessage(Main.prefix + "[color=green]System 1/1 wurde erfolgreich geladen![/color]");
    api.sendServerMessage(Main.prefix + "[color=green]Die Systeme wurden erfolgreich geladen![/color]");
    System.out.println("Die Systeme wurden erfolgreich geladen!");
    api.sendServerMessage(Main.prefix + "[color=green]Der Startvorgang wurde erfolgreich abgeschlossen![/color]");
    System.out.println("Der Startvorgang wurde erfolgreich abgeschlossen!");
    System.out.println("Der Info-Bot wurde erfolgreich gestartet!");

}

}`

(Events)

`package de.ragecraft;

import com.github.theholywaffle.teamspeak3.api.event.ChannelCreateEvent; import com.github.theholywaffle.teamspeak3.api.event.ChannelDeletedEvent; import com.github.theholywaffle.teamspeak3.api.event.ChannelDescriptionEditedEvent; import com.github.theholywaffle.teamspeak3.api.event.ChannelEditedEvent; import com.github.theholywaffle.teamspeak3.api.event.ChannelMovedEvent; import com.github.theholywaffle.teamspeak3.api.event.ChannelPasswordChangedEvent; import com.github.theholywaffle.teamspeak3.api.event.ClientJoinEvent; import com.github.theholywaffle.teamspeak3.api.event.ClientLeaveEvent; import com.github.theholywaffle.teamspeak3.api.event.ClientMovedEvent; import com.github.theholywaffle.teamspeak3.api.event.PrivilegeKeyUsedEvent; import com.github.theholywaffle.teamspeak3.api.event.ServerEditedEvent; import com.github.theholywaffle.teamspeak3.api.event.TS3Listener; import com.github.theholywaffle.teamspeak3.api.event.TextMessageEvent; import com.github.theholywaffle.teamspeak3.api.wrapper.Client;

public class Events {

public static void loadEvents() {

    Main.api.registerAllEvents();
    Main.api.addTS3Listeners(new TS3Listener() {

        @Override
        public void onTextMessage(TextMessageEvent e) {

            for (Client Client : Main.api.getClients()) {

            int clientDatabaseId = Client.getDatabaseId();

                    if (e.getMessage().equalsIgnoreCase("Annehmen")) {
                        Main.api.addClientToServerGroup(24, Client.getDatabaseId());
                    }
            }
        }

        @Override
        public void onServerEdit(ServerEditedEvent e) {

        }

        @Override
        public void onPrivilegeKeyUsed(PrivilegeKeyUsedEvent e) {

        }

        @Override
        public void onClientMoved(ClientMovedEvent e) {

        }

        @Override
        public void onClientLeave(ClientLeaveEvent e) {

        }

        @Override
        public void onClientJoin(ClientJoinEvent e) {

            int clientId = e.getClientId();

                if (!(e.getClientServerGroups().contains("24"))) {
                    Main.api.sendPrivateMessage(clientId, "[color=red]Bitte akzeptiere die Serverregeln, bevor du unseren Server nutzt! Anschließend kannst du alle Funktionen in vollem Umfang nutzen![/color]");
                    Main.api.sendPrivateMessage(clientId, "[color=red]Unsere Serverregeln findest du hier: LINK[/color]");
                    Main.api.sendPrivateMessage(clientId, "[color=blue]Um unsere Serverregeln zu akzeptieren, schreibe [/color][color=green]Annehmen[/color] [color=blue]in den Chat. Falls du unsere Serverregeln nicht akzeptieren möchtest, schreibe [/color][color=red]Ablehnen[/color] [color=blue]in den Chat![/color]");
            }
        }

        @Override
        public void onChannelPasswordChanged(ChannelPasswordChangedEvent e) {

        }

        @Override
        public void onChannelMoved(ChannelMovedEvent e) {

        }

        @Override
        public void onChannelEdit(ChannelEditedEvent e) {

        }

        @Override
        public void onChannelDescriptionChanged(ChannelDescriptionEditedEvent e) {

        }

        @Override
        public void onChannelDeleted(ChannelDeletedEvent e) {

        }

        @Override
        public void onChannelCreate(ChannelCreateEvent e) {

        }
    });
}

} `

Console-log:

`Der Info-Bot wird gestartet... Der Info-Bot wird mit dem Teamspeak-3-Server verbunden... Der Info-Bot wurde erfolgreich mit dem Teamspeak-3-Server verbunden! Der Startvorgang wird abgeschlossen... Die Systeme werden geladen... Die Systeme wurden erfolgreich geladen! Der Startvorgang wurde erfolgreich abgeschlossen! Der Info-Bot wurde erfolgreich gestartet! 2019-06-12 18:08:08.122 [DEBUG] TS3 command error: {msg=insufficient client permissions, id=2568, failed_permid=175} 2019-06-12 18:08:08.125 [ERROR] Event listener threw an exception com.github.theholywaffle.teamspeak3.api.exception.TS3CommandFailedException: A "servergroupaddclient" command returned with a server error.

insufficient client permissions (ID 2568), failed permission with ID 175 at com.github.theholywaffle.teamspeak3.api.CommandFuture.checkForFailure(CommandFuture.java:415) at com.github.theholywaffle.teamspeak3.api.CommandFuture.getUninterruptibly(CommandFuture.java:356) at com.github.theholywaffle.teamspeak3.TS3Api.addClientToServerGroup(TS3Api.java:292) at de.ragecraft.Events$1.onTextMessage(Events.java:33) at com.github.theholywaffle.teamspeak3.api.event.TextMessageEvent.fire(TextMessageEvent.java:69) at com.github.theholywaffle.teamspeak3.EventManager$ListenerTask.run(EventManager.java:169) at com.github.theholywaffle.teamspeak3.TS3Query.lambda$submitUserTask$0(TS3Query.java:232) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) `

ghost commented 5 years ago

The formatting unfortunately did not work as it should ...

Jopeeee commented 5 years ago

Was du geschrieben hast macht keinen Sinn und der Bot scheint nicht genug Rechte zu haben um die Gruppe zu setzen.

So sollte es gehen: `
public void onTextMessage(TextMessageEvent e) {

            Client c = Main.api.getClientByUId(e.getInvokerUniqueId());

            if (e.getMessage().toLowerCase().equalsIgnoreCase("annehmen")) {
                if (!c.isInServerGroup(24))  {
                    Main.api.addClientToServerGroup(24, c.getDatabaseId());
                } else {
                    Main.api.sendPrivateMessage(c.getId(), "Du hast die Regeln bereits akzeptiert");
                }
            }
        }`
yannicklamprecht commented 5 years ago

The typical Minecraft "Developer". Static abuse at its best.