Stefan1200's Forum

Deutsch => Allgemeine Diskussionen => Topic started by: Darkandro on September 14, 2016, 03:29:30 PM

Title: Befehl mit argumenten
Post by: Darkandro 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
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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.
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 14, 2016, 06:42:30 PM
Und wie ist der Befehl für das editieren der channelbeschreibung?
Also in der API?
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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).
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 14, 2016, 08:59:07 PM
wenn ich \s \n oder so verwende kommt invalid escape sequence
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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.
Title: Re: Befehl mit argumenten
Post by: Darkandro 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)
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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?
Title: Re: Befehl mit argumenten
Post by: Darkandro 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();
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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.
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 15, 2016, 12:55:05 PM
Wie kann ich dann die DBID von einem Client bekommen, wenn dieser sich ausloggt??
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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
Title: Re: Befehl mit argumenten
Post by: Darkandro 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.
Title: Re: Befehl mit argumenten
Post by: Stefan1200 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).
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 15, 2016, 08:03:33 PM
Das Event "notifyclientleftview" gibt mir keine UniqueID
Title: Re: Befehl mit argumenten
Post by: Stefan1200 on September 15, 2016, 08:21:38 PM
Das Event "notifyclientleftview" gibt mir keine UniqueID

Habe mal in meine Notizen geguckt, du hast recht. Aber du kannst dir ja theoretisch alle X Sekunden eine Clientlist von der JTS3ServerMod Klasse abfragen und die bei einem notifyclientleftview nach der clid durchsuchen.
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 15, 2016, 08:31:28 PM
Danke top Idee. Hätte ich auch von selber drauf kommen können xD
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 16, 2016, 11:34:45 AM
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.

Bei dem Beispiel ist kein Befehl mit dynamischen Argument.

Ich möchte, dass wenn man dem Bot schreibt !gaming <spiel>, dass der Bot das Argument <spiel> auswertet
Title: Re: Befehl mit argumenten
Post by: Stefan1200 on September 16, 2016, 11:54:52 AM

Bei dem Beispiel ist kein Befehl mit dynamischen Argument.

Ich möchte, dass wenn man dem Bot schreibt !gaming <spiel>, dass der Bot das Argument <spiel> auswertet

Klar, der Auto Kick Timer hat ein Chat Befehl mit dem Argument time
Title: Re: Befehl mit argumenten
Post by: Darkandro on September 16, 2016, 03:46:29 PM
Ich habs jetzt hinbekommen. Danke dennoch. Ich frag einfach eine Passage mit substinrg ab.  ;)
Title: Re: Befehl mit argumenten
Post by: Stefan1200 on September 16, 2016, 04:17:41 PM
Ich habs jetzt hinbekommen. Danke dennoch. Ich frag einfach eine Passage mit substinrg ab.  ;)

Klar, substring, indexof und split sind deine Freunde. Anders mache ich das in meinen Funktionen auch nicht. ;-)