# TheHolyWaffle TS3API sendPrivatMessage Bug



## IAmFloppy (23. Feb 2019)

Hey!

Ich arbeite gerade ein bisschen mit der TS3API von TheHolyWaffle.
Wenn ein Spieler joint, soll der Query Bot ihm eine kleine Nachicht schreiben.
Das Problem bei der Sache ist, dass das "Fenster" für Private Nachichten aus irgendeinem Grund für alle gilt.
Das heißt:
Der Bot schreibt mich an. Wenn mich ein anderer User anschreibt, ist es normalerweise bei TS so, dass sich ein neues Nachichten Fenster öffnet. Hier ist es aber so, dass ich diese Nachicht beim Bot Nachichten Fenster bekomme. Wenn ich Nachichten in das Bot Nachichten Fenster schreibe, bekommt diese Nachicht der, dem ich zuletzt geschrieben habe.
Ist das ein Bug in der API oder könnte das an meinem Code liegen?








```
public class QueryBot {

    private TS3Config config = new TS3Config();
    private TS3Query query;
    private TS3Api api;

    public QueryBot() {
        config.setHost("Mein host");
        config.setEnableCommunicationsLogging(true);

        query = new TS3Query(config);
        query.connect();

        api = query.getApi();
        api.login("queryadmin", "sQr9Rue4");
        api.selectVirtualServerById(1);
        api.setNickname("•● Support × Bot");

        int clientId = api.whoAmI().getId();
        int dbId = api.whoAmI().getDatabaseId();

        api.registerAllEvents();

        api.addTS3Listeners(new TS3EventAdapter() {
            @Override
            public void onTextMessage(TextMessageEvent e) {
                if (e.getTargetMode() == TextMessageTargetMode.CLIENT) {
                    if (e.getMessage().startsWith("!link ")) {
                        String code = e.getMessage().replace("!link ", "");
                        if (TeamspeakVerify.isCodeExisting(code)) {
                            String username = TeamspeakVerify.verify(e.getInvokerUniqueId(), code);
                            api.sendPrivateMessage(e.getInvokerId(), "Du bist nun als [b]" + username + "[/b] verifiziert!");
                            Timer timer = new Timer();
                            timer.schedule(new TimerTask() {
                                @Override
                                public void run() {
                                    api.editClient(e.getInvokerId(), Collections.singletonMap(ClientProperty.CLIENT_DESCRIPTION, "Minecraft-Name: " + TeamspeakVerify.getUsername(e.getInvokerUniqueId())));
                                }
                            }, 2000);
                        } else {
                            api.sendPrivateMessage(e.getInvokerId(), "Es existiert kein User mit diesem Code!");
                        }
                    }
                }
            }

            @Override
            public void onClientJoin(ClientJoinEvent e) {
                Timer timer = new Timer();
                timer.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        if (e.getClientId() != clientId) {
                            api.sendPrivateMessage(e.getClientId(), "Willkommen " + e.getClientNickname() + ", auf dem Teamspeak³!");
                        }
                        if (TeamspeakVerify.isVerified(e.getUniqueClientIdentifier())) {
                            api.editClient(e.getClientId(), Collections.singletonMap(ClientProperty.CLIENT_DESCRIPTION, "Minecraft-Name: " + TeamspeakVerify.getUsername(e.getUniqueClientIdentifier())));
                        } else {
                            api.editClient(e.getClientId(), Collections.singletonMap(ClientProperty.CLIENT_DESCRIPTION, ""));
                        }
                    }
                }, 2000);
            }

            @Override
            public void onClientLeave(ClientLeaveEvent e) {

            }

            @Override
            public void onServerEdit(ServerEditedEvent e) {
                super.onServerEdit(e);
            }

            @Override
            public void onChannelEdit(ChannelEditedEvent e) {
                super.onChannelEdit(e);
            }

            @Override
            public void onChannelDescriptionChanged(ChannelDescriptionEditedEvent e) {
                super.onChannelDescriptionChanged(e);
            }

            @Override
            public void onClientMoved(ClientMovedEvent e) {
                if (e.getTargetChannelId() == 37) {
                    for (Client client : api.getClients()) {
                        if (client.getId() != clientId) {
                            if (isTeamRank(client.getNickname()) && !isSilent(client.getNickname())) {
                                api.pokeClient(client.getId(), "Jemand wartet auf Support!");
                            }
                        }
                    }
                }
            }

            @Override
            public void onChannelCreate(ChannelCreateEvent e) {
                super.onChannelCreate(e);
            }

            @Override
            public void onChannelDeleted(ChannelDeletedEvent e) {
                super.onChannelDeleted(e);
            }

            @Override
            public void onChannelMoved(ChannelMovedEvent e) {

            }

            @Override
            public void onChannelPasswordChanged(ChannelPasswordChangedEvent e) {
                super.onChannelPasswordChanged(e);
            }

            @Override
            public void onPrivilegeKeyUsed(PrivilegeKeyUsedEvent e) {
                super.onPrivilegeKeyUsed(e);
            }
        });
    }

    private boolean isTeamRank(String clientNameExact) {
        List<ServerGroup> groups = api.getServerGroupsByClient(api.getClientByNameExact(clientNameExact, false));
        for (ServerGroup group : groups) {
            if (group.getId() == 6 || group.getId() == 13 || group.getId() == 14 || group.getId() == 11 || group.getId() == 12) {
                return true;
            }
        }
        return false;
    }

    public boolean isSilent(String clientNameExact) {
        List<ServerGroup> groups = api.getServerGroupsByClient(api.getClientByNameExact(clientNameExact, false));
        for (ServerGroup group : groups) {
            if (group.getId() == 23) {
                return true;
            }
        }
        return false;
    }

}
```


----------

