Author Topic: Befehl mit argumenten  (Read 19671 times)

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Befehl mit argumenten
« on: September 14, 2016, 03:29:30 PM »
Heyho,

ist es möglich einen Befehl mit argumenten zu erstellen?

Beispiel: !gaming <irgendwas>

Und wie kann ich mit der API eine Channelbeschreibung ändern?

Danke im Voraus
« Last Edit: September 14, 2016, 04:39:05 PM by Darkandro »

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #1 on: September 14, 2016, 06:32:26 PM »
Du müsstest ein Plugin für den JTS3ServerMod schreiben. Dazu gibt es eine Anleitung im plugins Verzeichnis. Im Beispiel Plugin ist sogar auch ein Chat Befehl vorhanden, das ein Argument verwendet.

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #2 on: September 14, 2016, 06:42:30 PM »
Und wie ist der Befehl für das editieren der channelbeschreibung?
Also in der API?

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #3 on: September 14, 2016, 08:18:18 PM »
Da gibt es keinen fertigen Befehl in der API, aber das kannst du mit der doCommand(String command) Methode von der Klasse JTS3ServerQuery (ist in der Plugin API vom JTS3ServerMod enthalten) realisieren.

Der TS3 Befehl wäre dafür, hier ein Beispiel:
channeledit cid=15 channel_description=My\sDescription

Die Channel Description einfach mit der Methode encodeTS3String(String str) von der Klasse JTS3ServerQuery vorher encodieren (der ersetzt dann die Leerzeichen mit \s und so weiter).

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #4 on: September 14, 2016, 08:59:07 PM »
wenn ich \s \n oder so verwende kommt invalid escape sequence

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #5 on: September 14, 2016, 09:08:45 PM »
wenn ich \s \n oder so verwende kommt invalid escape sequence

Das macht doch encodeTS3String(String str) alles für dich.

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #6 on: September 14, 2016, 09:12:22 PM »
Und wie mach ich dann den Zeilenumbruch?

Code: [Select]
queryLib.doCommand("channeledit cid=189 channel_description=" + queryLib.encodeTS3String("My Description test"));

Fehler:
Code: [Select]
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1145)
at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:464)
at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at de.stefan1200.jts3servermod.JTS3ServerMod.c(Unknown Source)
at de.stefan1200.jts3servermod.JTS3ServerMod.b(Unknown Source)
at de.stefan1200.jts3servermod.JTS3ServerMod.b(Unknown Source)
at de.stefan1200.jts3servermod.i.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)
« Last Edit: September 14, 2016, 09:54:55 PM by Darkandro »

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #7 on: September 15, 2016, 06:13:55 AM »
Und wie mach ich dann den Zeilenumbruch?

Code: [Select]
queryLib.doCommand("channeledit cid=189 channel_description=" + queryLib.encodeTS3String("My Description test"));

Fehler:
Code: [Select]
java.lang.NullPointerException
at java.util.concurrent.ConcurrentHashMap.hash(ConcurrentHashMap.java:333)
at java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1145)
at java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:464)
at java.lang.ClassLoader.loadClass(ClassLoader.java:405)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at de.stefan1200.jts3servermod.JTS3ServerMod.c(Unknown Source)
at de.stefan1200.jts3servermod.JTS3ServerMod.b(Unknown Source)
at de.stefan1200.jts3servermod.JTS3ServerMod.b(Unknown Source)
at de.stefan1200.jts3servermod.i.run(Unknown Source)
at java.lang.Thread.run(Thread.java:745)


Ganz normal in Java:
Code: [Select]
queryLib.doCommand("channeledit cid=189 channel_description=" + queryLib.encodeTS3String("My Description test\nIch bin die zweite Zeile"));


Was steht zusammen mit der NullPointerException in der Logdatei? Sicher, das du die Mainclass im JAR Manifest hinzugefügt hast?

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #8 on: September 15, 2016, 07:23:17 AM »
Sobald ich diese Zeile entferne lädt er das Plugin wieder richtig.
Edit: Jetzt funktioniert es, wenn ich die main-class selber definiere. xD

Danke :D

Edit2: Warum bekomme ich hier die Fehlermeldung?
Die beiden 8en sind nur Debug
Code: [Select]
ServerQuery Error 512: invalid clientID 8 8
Code: [Select]
int clientid = Integer.parseInt(eventInfo.get("clid"));
client = queryLib.getInfo(queryLib.INFOMODE_CLIENTINFO, clientid).toString();
« Last Edit: September 15, 2016, 09:05:47 AM by Darkandro »

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #9 on: September 15, 2016, 12:09:00 PM »
Edit2: Warum bekomme ich hier die Fehlermeldung?
Die beiden 8en sind nur Debug
Code: [Select]
ServerQuery Error 512: invalid clientID 8 8

"Invalid ClientID" ist eine Fehlermeldung, die vom TS3 Server kommt. D.h. der Client mit der Client ID, die du übergeben hast, ist aktuell nicht mehr online.

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #10 on: September 15, 2016, 12:55:05 PM »
Wie kann ich dann die DBID von einem Client bekommen, wenn dieser sich ausloggt??

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #11 on: September 15, 2016, 03:08:17 PM »
Wie kann ich dann die DBID von einem Client bekommen, wenn dieser sich ausloggt??

ClientInfo geht nur bei Clients, die gerade online sind. Deswegen nur ClientID. Die ClientDBInfo geht auch von offline clients, enthält aber weniger / andere Informationen.
https://www.stefan1200.de/documentation/jts3serverquery/de/stefan1200/jts3serverquery/JTS3ServerQuery.html#INFOMODE_CLIENTDBINFO

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #12 on: September 15, 2016, 03:15:17 PM »
Wie kann ich dann die DBID von einem Client bekommen, wenn dieser sich ausloggt??

ClientInfo geht nur bei Clients, die gerade online sind. Deswegen nur ClientID. Die ClientDBInfo geht auch von offline clients, enthält aber weniger / andere Informationen.
https://www.stefan1200.de/documentation/jts3serverquery/de/stefan1200/jts3serverquery/JTS3ServerQuery.html#INFOMODE_CLIENTDBINFO

Dafür benötige ich aber die Datenbank ID und wird von den Disconnect-Event nicht übergeben. Ich habe schon alles mögliche probiert nur noch keine Lösung gefunden.

Stefan1200

  • Administrator
  • *****
  • Posts: 2244
    • View Profile
Re: Befehl mit argumenten
« Reply #13 on: September 15, 2016, 03:40:20 PM »
Dafür benötige ich aber die Datenbank ID und wird von den Disconnect-Event nicht übergeben. Ich habe schon alles mögliche probiert nur noch keine Lösung gefunden.

Die Unique ID hast du aber. Damit kann man arbeiten. Falls du das in einem JTS3ServerMod Plugin benötigst, liefert der JTS3ServerMod eine API dafür mit. Schaue dir mal die Doku an: https://www.stefan1200.de/documentation/jts3servermod/Plugin_API/de/stefan1200/jts3servermod/interfaces/ClientDatabaseCache_Interface.html
Zum Beispiel: getDatabaseID(String clientUniqueID)
Mit der Database ID kannst du dann in dieser Klasse auch andere Dinge direkt abfragen, ohne an den TS3 Server gehen zu müssen (falls der Cache aktiv ist, sonst macht die Klasse das Online, wenn möglich).

Darkandro

  • Newbie
  • *
  • Posts: 13
    • View Profile
Re: Befehl mit argumenten
« Reply #14 on: September 15, 2016, 08:03:33 PM »
Das Event "notifyclientleftview" gibt mir keine UniqueID