Variablen einem Twasi-Plugin hinzufügen
Das Hinzufügen dynamischer Variablen zu deinem Plugin ist sehr einfach! Der beste Weg, um zu erklären, wie es funktioniert, ist ein einfaches Beispiel.
Erstellen einer Variablen Controller-Klasse
Wir werden eine Variable hinzufügen, die die aktuelle Zeit zurückgibt. Wir werden auch ein Argument verwenden, um dem Benutzer die Angabe eines benutzerdefinierten Formats zu ermöglichen.
Lass uns beginnen, eine neue Klasse namens TimeVariable zu erstellen.
Wenn du mehrere Variablen hast, ist es eine gute Praxis, sie in ein Paket namens "Variablen" oder ähnliches zu packen, um alles sauber zu halten.
package de.merlinw.variables;
import net.twasi.core.interfaces.api.TwasiInterface;
import net.twasi.core.models.Message.TwasiMessage;
import net.twasi.core.plugin.api.TwasiUserPlugin;
import net.twasi.core.plugin.api.TwasiVariable;
import java.util.Arrays;
import java.util.List;
public class TimeVariable extends TwasiVariable {
public TimeVariable(TwasiUserPlugin owner) {
super(owner);
}
@Override
public String process(String name, TwasiInterface inf, String[] params, TwasiMessage message) {
// This function is used to resolve the variable
}
@Override
public List<String> getNames() {
return Arrays.asList("time", "timestamp");
}
}
Es gibt zwei sehr wichtige Funktionen, die du überschreiben musst:
Die erste ist die process-Funktion, die aufgerufen wird, wenn Twasi eine Nachricht mit einer Variable sendet, die aufgelöst werden muss. Der Rückgabetyp ist ein String. Twasi wird die Variable durch das ersetzen, was du hier zurückgibst. Es hat vier Parameter:
- 'String name' ist der verwendete Variablenname (da Variablen mehrere Namen/Aliase haben können).
- 'TwasiInterface inf' ist die TwasiInterface des Benutzers, in dessen Kanal die Variable verwendet wird.
- 'String[] params' enthält alle Argumente/Parameter, die am Ende des Variablennames in den Klammern angegeben wurden (wird leer sein, wenn es überhaupt keine Klammern gibt).
- 'TwasiMessage message' ist die TwasiMessage, auf die wir derzeit antworten.
Die zweite ist die getNames-Funktion, die jeden Namen zurückgibt, den die Variable haben sollte. Der erste String in der Ausgabeliste ist der Hauptname deiner Variable, der in Variablenlisten angezeigt wird. Alle anderen Strings sind Aliase, die ebenfalls verwendet werden können, aber nicht aufgelistet werden.
Nun wollen wir unserer process-Funktion etwas Logik hinzufügen:
@Override
public String process(String name, TwasiInterface inf, String[] params, TwasiMessage message) {
SimpleDateFormat hourFormat = new SimpleDateFormat("HH:mm");
return hourFormat.format(Calendar.getInstance().getTime());
}
Jetzt gibt unsere Variable die aktuelle Zeit zurück. Fügen wir einen Parameter hinzu:
@Override
public String process(String name, TwasiInterface inf, String[] params, TwasiMessage message) {
String format = (params.length > 0 ? params[0] : "HH:mm");
SimpleDateFormat hourFormat = new SimpleDateFormat(format);
return hourFormat.format(Calendar.getInstance().getTime());
}
Wenn ein Parameter angegeben ist, wird der Datumsparser ihn anstelle von 'HH:mm' verwenden.
Fehlerbehandlung
In den meisten Fällen musst du dich nicht um Fehlerbehandlung kümmern. Wenn deine process-Funktion eine Ausnahme erzeugt, löst Twasi die Variable automatisch mit 'ERROR' auf. Wenn die Ausnahme eine ArrayIndexOutOfBoundsException ist, wird Twasi 'INSUFFICIENT_PARAMETERS' zurückgeben.
Natürlich kannst du eine benutzerdefinierte Fehlerbehandlung implementieren, um nützlichere Fehlermeldungen zu erhalten:
@Override
public String process(String name, TwasiInterface inf, String[] params, TwasiMessage message) {
String format = (params.length > 0 ? params[0] : "HH:mm");
SimpleDateFormat hourFormat = new SimpleDateFormat(format);
try {
return hourFormat.format(Calendar.getInstance().getTime());
} catch (Exception e) {
return "INVALID_FORMAT";
}
}
Registrieren von Variablen
Der letzte Schritt ist es, den Variablenkontroller - wie die Befehle in der TwasiUserPlugin-Klasse deines Plugins - zu registrieren:
public ExampleUserPlugin() {
// Register commands
registerCommand(ExampleCommand.class);
registerCommand(ExampleStructuredCommand.class);
// Register variables
registerVariable(TimeVariable.class);
}
Wenn Sie die Signatur deines Variable-Controller-Klassen-Konstruktors geändert hast, wirft die obige Syntax einen Fehler auf. Du kannst diese Syntax stattdessen verwenden:
registerVariable(new TimeVariable(this, otherParameters));
Fortfahren
Im nächsten Teil der "Getting started" Serie erfährst du, wie du Berechtigungen in deinem Plugin verwenden kannst!