TeamSpeak-3-Java-API icon indicating copy to clipboard operation
TeamSpeak-3-Java-API copied to clipboard

Errors / Bugs?

Open YourGameSpace opened this issue 5 years ago • 6 comments

Hello,

Unfortunately I have several mistakes and unfortunately can not explain them to me. As you can see on the screenshot (see below), I get (not always, but often) this error when a client leaves the server .. My corresponding code, as well as the methods used are attached via Pastebin.

In addition .. When I send a private message, also appears again and again a bug in the console that the client ID is wrong (see also screenshot), but the client receives the message. But why the mistake? The client ID is correct in every case?

Then another thing .. If I send several (private) messages in a row, then they have a delay .. Means: (I noticed so ..) When I send messages in a row, so claim two messages a whole second. Sum of time: 3 seconds .. And that's too much or just not good ..

Hope it can be helped me with these things .. Send also like to request more parts of my code

LG TUBEOF

https://i.imgur.com/zccTg1M.png (Console) https://i.imgur.com/P4wNXm2.png (Code) https://i.imgur.com/bhdJFtx.png (Code)

YourGameSpace avatar Apr 01 '19 18:04 YourGameSpace

getClientInfo only works if the client is online. By the time you're getting a ClientLeaveEvent, the client has already left the server. Therefore, that command will always fail.

More explanation of this phenomenon in other issues or the FAQ 😄

rogermb avatar Apr 01 '19 19:04 rogermb

I leave the ClientInfo with the important information in the beginning when the client on the server cache join (cache) so that I can then retrieve them -> ClientInfo clientInfo = data.getCacheClientInfo (clientId);

YourGameSpace avatar Apr 01 '19 19:04 YourGameSpace

Oh, my bad, I just kinda glanced over your code 😅

If you're getting a NullPointerException at this specific line:

ClientInfo clientInfo = data.getCacheClientInfo(clientId);

then the only logical conclusion is that data - for whatever reason - is null. That's the only expression on this line that could cause an NPE.

rogermb avatar Apr 01 '19 19:04 rogermb

Hey @TUBEOF , I think your second Method could be more readable:

private List<Integer> serverGroupIDs = Arrays.asList(2,4);

private boolean yourMethod(int clientID, int serverGroupID){
   return api.getServerGroupsByClientId(clientID).stream().anyMatch(serverGroup -> serverGroupIDs.contains(serverGroupID));
}

as for the NPE I think @rogermb has right: your data Object is somehow null.

Tumbledore avatar Apr 02 '19 09:04 Tumbledore

To query from an offline client, if he is in a group, I use the code you sent in a different thread .. This looks like this: https://i.imgur.com/A37491w.png The code is exactly the same in itself?

BTW I fixed the bug with the client info. However, the problem with the delay when sending messages still remains. How can I fix this? D: -.- @rogermb

YourGameSpace avatar Apr 02 '19 18:04 YourGameSpace

Well, your isDatabaseClientInTeam method causes way too many commands to be sent for no good reason. Remember that any call to a method in TS3Api or TS3ApiAsync causes at least one command to be sent. So instead of repeatedly calling api.getServerGroupsByClientId(databaseId), consider doing something like:

// Defined once as a field somewhere else
private final Set<Integer> TEAM_GROUP_IDS = Set.of(6, 11, 24, 45, 46, 47, 49);

// Then, in your method:
return Main.getTS3API().getServerGroupsByClientId(databaseId)
                       .stream()
                       .anyMatch(sg -> TEAM_GROUP_IDS.contains(sg.getId()));

Also, if your query runs on the same machine as your TS3 server or if you're able to add the IP of your query to the TS3 server's whitelist, you can use the FloodRate.UNLIMITED flood rate setting. That will make the query send commands at a much quicker rate (as it doesn't have to watch out not to get flood-banned), so you should see less of a delay. But even then - try not to go too wild with the number of commands you send to the TS3 server.

rogermb avatar Apr 02 '19 23:04 rogermb