JTS3ServerQuery - Channel Wechseln anzeigen

Started by DreamGamer, August 10, 2016, 06:38:52 PM

Previous topic - Next topic

DreamGamer

Hallo,
Ich hätte mal eine Frage ich habe jetzt Zwei Tage versucht es selbst herauszufinden aber bin nicht besonders weit gekommen. Ich möchte gerne auflisten wer und wann eine Person den Channel wechselt aber nur wenn er ihn selber wechselt nicht gemoved wird. Und das Event Channel habe ich schon drin bzw. registriert.

LG DreamGamer

Stefan1200

#1
Beim Event notifyclientmoved schaue dir mal den Wert bei reasonid an. Der sagt dir, warum der Client den Channel gewechselt hat (0 = selbst gewechselt, 1 = verschoben durch andere, etc.).

DreamGamer

Sorry aber ich verstehe das nicht so ganz gibt es dafür vllt. auch ein Example ?

Stefan1200

Dafür müsste ich erstmal wissen, was du überhaupt machst. Worin möchtest du das gerade implementieren?

DreamGamer

Also ich wollte für meinen TS ein Bot entwerfen der nachschaut wer channel spammt und diese Leute automatisch kickt oder den Rang NoMove für x Sekunden gibt. Ich habe aber noch nicht etwas mit JTSQuery gemacht habe schon viele in Java Halt gemacht aber noch nie Richtung Teamspeak. In der Example Datei habe ich schon viel gelernt aber halt so etwas wie auslesen wer den Channel wann gewechselt hat eben noch nicht.

DreamGamer

Ok ich glaube ich habe es herausgefunden. Aber ein Problem gibt es noch. Wenn man wie im Example das hier z.b Abfragt: Vector<HashMap<String, String>> dataClientServerGroups = query.getList(JTS3ServerQuery.LISTMODE_CLIENTDBLIST);
StringBuffer sb = new StringBuffer();
for (HashMap<String, String> hashMap : dataClientServerGroups)
{
if (debug) outputHashMap(hashMap, System.out);
if (sb.length() > 0)
{
sb.append(", ");
}
sb.append(hashMap.get("channel_name"));
}


Woher weiß man was man bei hashMap.get eintragen soll ?

Stefan1200

Nein, die Channel Events bekommst du vom TeamspeakActionListener, siehe hier: https://www.stefan1200.de/documentation/jts3serverquery/de/stefan1200/jts3serverquery/TeamspeakActionListener.html

hashMap.get enthält die selben Schlüssel, wie diese vom TS3 Server Query Interface zurück gegeben werden. Natürlich kannst du dir alle Keys auch per hashMap.keySet() zurück geben lassen.

DreamGamer

Ok. Für den TeamspeakActionListener gibt es kein Example oder ?

Stefan1200

#8
Wenn ich das richtig sehe, hast du dir den JTS3ServerQueryExample doch schon angeschaut. Ohne TeamspeakActionListener würden die Chatbefehle doch gar nicht funktionieren (sind doch auch Events).

Klassendefinition der JTS3ServerQueryExample:
public class JTS3ServerQueryExample implements TeamspeakActionListener

Zu implementierende Methode:
public void teamspeakActionPerformed(String eventType, HashMap<String, String> eventInfo)

Wenn eventType equals "notifyclientmoved", dann wertest du die Informationen in der eventInfo aus. Wenn du in Zeile 16 die debug Variable auf true setzt, bekommst du die Inhalte der eventInfo auf der Konsole ausgegeben. Der Wert reasonid in der eventInfo gibt halt einen Grund fürs Verschieben als Zahl an (0 = selbst gewechselt, 1 = verschoben durch andere, etc.).

DreamGamer

Also wenn ich das richtig verstanden habe soll ich halt bei eventInfo "notifyclientmoved" abfragen. Und ich habe dann dieses hier geschrieben else if (eventInfo.get("notifyclientmoved") == "2")
{
System.out.println("Channel Switched");

}

Aber irgendwie funktioniert es nicht. Und das Problem es gibt keine Fehler Meldung. Ich denke mal der Fehler ist offensichtlich aber ich checke ihn einfach nicht.


Stefan1200

Quote from: DreamGamer on August 11, 2016, 10:22:12 PM
Also wenn ich das richtig verstanden habe soll ich halt bei eventInfo "notifyclientmoved" abfragen.

Falsch verstanden, bitte meinen obigen Text nochmal langsam lesen.

DreamGamer

Ahh ok. also ist es so richtig ?
else if (eventType.equals("notifyclientmoved"))
{
System.out.println("Channel Switched");

}

Stefan1200


DreamGamer

#13
Aber es passiert immer noch nichts wenn ich einen Channel Wechsel oder jemanden move warum das ?

UPDATE:

Ich habe bis jetzt das hier als Script aber ich verstehe nicht warum es nicht Funktioniert es scheitert ja bei der else if Abfrage.

else if (eventType.equals("notifyclientmoved"))
{
try {

System.out.println("Channel Switched");
String var = eventInfo.get("ctid ");
try {
query.sendTextMessage(Integer.parseInt(eventInfo.get("invokerid")), JTS3ServerQuery.TEXTMESSAGE_TARGET_CHANNEL, "Channel Changed" + var);
} catch (Exception e2) { /* do nothing */ }


} catch (Exception e) {
e.printStackTrace();
try
{
query.sendTextMessage(Integer.parseInt(eventInfo.get("invokerid")), JTS3ServerQuery.TEXTMESSAGE_TARGET_CLIENT, "An error occurred: " + e.toString());
}
catch (Exception e2) { /* do nothing */ }
}

}

Stefan1200

Wie hast du denn das Channel Event registriert? Wie sieht der ganze Source aus?