Author Topic: JTS3ServerQuery - Channel Wechseln anzeigen  (Read 5629 times)

DreamGamer

  • Newbie
  • *
  • Posts: 36
    • View Profile
JTS3ServerQuery - Channel Wechseln anzeigen
« on: August 10, 2016, 06:38:52 PM »
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
« Last Edit: August 11, 2016, 07:51:34 PM by Stefan1200 »

Stefan1200

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #1 on: August 10, 2016, 08:13:06 PM »
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.).
« Last Edit: August 16, 2016, 07:22:15 PM by Stefan1200 »

DreamGamer

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #2 on: August 10, 2016, 09:59:50 PM »
Sorry aber ich verstehe das nicht so ganz gibt es dafür vllt. auch ein Example ?

Stefan1200

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #3 on: August 10, 2016, 10:10:05 PM »
Dafür müsste ich erstmal wissen, was du überhaupt machst. Worin möchtest du das gerade implementieren?

DreamGamer

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #4 on: August 10, 2016, 10:17:08 PM »
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

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #5 on: August 11, 2016, 04:22:16 AM »
Ok ich glaube ich habe es herausgefunden. Aber ein Problem gibt es noch. Wenn man wie im Example das hier z.b Abfragt:
Code: [Select]
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

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #6 on: August 11, 2016, 07:46:24 AM »
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

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #7 on: August 11, 2016, 04:02:03 PM »
Ok. Für den TeamspeakActionListener gibt es kein Example oder ?

Stefan1200

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: Channel Wechseln anzeigen
« Reply #8 on: August 11, 2016, 07:50:58 PM »
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.).
« Last Edit: August 16, 2016, 07:22:49 PM by Stefan1200 »

DreamGamer

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: JTS3ServerQuery - Channel Wechseln anzeigen
« Reply #9 on: August 11, 2016, 10:22:12 PM »
Also wenn ich das richtig verstanden habe soll ich halt bei eventInfo "notifyclientmoved" abfragen. Und ich habe dann dieses hier geschrieben
Code: [Select]
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

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: JTS3ServerQuery - Channel Wechseln anzeigen
« Reply #10 on: August 11, 2016, 10:42:50 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

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: JTS3ServerQuery - Channel Wechseln anzeigen
« Reply #11 on: August 11, 2016, 10:56:17 PM »
Ahh ok. also ist es so richtig ?
Code: [Select]
else if (eventType.equals("notifyclientmoved"))
{
System.out.println("Channel Switched");

}

Stefan1200

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: JTS3ServerQuery - Channel Wechseln anzeigen
« Reply #12 on: August 11, 2016, 11:10:23 PM »
Das kommt dem näher, richtig. ;-)

DreamGamer

  • Newbie
  • *
  • Posts: 36
    • View Profile
Re: JTS3ServerQuery - Channel Wechseln anzeigen
« Reply #13 on: August 11, 2016, 11:14:09 PM »
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.

Code: [Select]
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 */ }
}

}
« Last Edit: August 12, 2016, 01:14:36 AM by DreamGamer »

Stefan1200

  • Administrator
  • *****
  • Posts: 1806
    • View Profile
Re: JTS3ServerQuery - Channel Wechseln anzeigen
« Reply #14 on: August 12, 2016, 11:02:22 AM »
Wie hast du denn das Channel Event registriert? Wie sieht der ganze Source aus?