Verarbeiten von Sitzungen in einem benutzerdefinierten Paket
- Zuletzt aktualisiert2022/05/20
Sie können eine Sitzung anhand eines Sitzungsnamens aus der SessionsMap extrahieren. Sie können Sitzungen im gleichen Paket verwenden, um Informationen zwischen Aktionen weiterzugeben, aber nicht an andere Pakete.
Konfigurieren Sie die folgenden Attribute
- Wenden Sie eine Anmerkung auf das Klassenfeld an und fügen Sie einen entsprechenden öffentlichen Setter hinzu.
- Rufen Sie die SessionsMap mithilfe des Attributs Sessions ab.
- Setzen Sie den Variablentyp auf Map<String, Object>.
- Legen Sie den attributeType fest: TEXT oder SESSION. Bei type = TEXT ist es eine reguläre Sitzung, bei type = SESSION ist es eine sharedSession.
Neue Sitzung starten
@BotCommand
@CommandPkg(label = "Start session", name = "startSession", description = "Start new session",
icon = "pkg.svg", node_label = "start session {{sessionName}}|") public class Start {
@Sessions
private Map<String, Object> sessions;
@Execute
public void start(@Idx(index = "1", type = TEXT) @Pkg(label = "Session name",
default_value_type = STRING, default_value = "Default") @NotEmpty String sessionName) {
// Check for existing session
if (sessions.containsKey(sessionName))
throw new BotCommandException(MESSAGES.getString("xml.SessionNameInUse", sessionName));
// Do some operation
// Create new session
sessions.put(sessionName, new Session(operation));
}
public void setSessions(Map<String, Object> sessions) {
this.sessions = sessions;
}
}
Sitzung beenden
@BotCommand
@CommandPkg(label = "End session", name = "endSession", description = "End session", icon =
"pkg.svg", node_label = "End session {{sessionName}}|")
public class EndSession {
@Sessions
private Map<String, Object> sessions;
@Execute
public void end(
@Idx(index = "1", type = TEXT) @Pkg(label = "Session name", default_value_type = STRING,
default_value = "Default") @NotEmpty String sessionName) {
sessions.remove(sessionName);
}
public void setSessions(Map<String, Object> sessions) {
this.sessions = sessions;
}
}
Sitzung hinzufügen
Im folgenden Beispiel werden Zeichenfolge-Objekte verwendet (obwohl Sie in echten Aktionen auch komplexe Objekte verwenden können).
@BotCommand
@CommandPkg(label = "[[SessionDemo.label]]", description = "[[SessionDemo.description]]", icon = "sample.svg", name = "sessionDemo")
public class SessionDemo {
// Sessions are provided as a Map. Actions can add or remove entries in this
// Map.
// The choice to reuse/overwrite/delete/add any Object in this Map belongs to
// the actions, and the framework makes no assumption regarding it.
@Sessions
private Map<String, Object> sessionMap;
@Execute
public void execute(@Idx(index = "1", type = TEXT)
@Pkg(label = "[[SessionDemo.name.label]]")
@NotEmpty
String name) {
if (!sessionMap.containsKey(name))
sessionMap.put(name, "Some Value");
}
// Ensure that a public setter exists.
public void setSessionMap(Map<String, Object> sessionMap) {
this.sessionMap = sessionMap;
}
}
Sitzungsvariable festlegen
Im folgenden Beispiel wird gezeigt, wie Sie eine Aktion entwickeln (z. B. Set session variable). In der Aktion werden die Sitzungsdetails abgerufen und als Sitzungsvariable gespeichert, damit die Informationen innerhalb eines bestimmten Pakets verwendet werden können.
@BotCommand
@CommandPkg(label = "[[SessionDemo2.label]]", description = "[[SessionDemo2.description]]", icon = "sample.svg", name = "SessionDemo2",
return_type = DataType.STRING)
public class SessionDemo2 {
// Sessions are provided as a Map. Actions can add or remove entries in this
// Map.
// The choice to reuse/overwrite/delete/add any Object in this Map belongs to
// the actions, and the framework makes no assumption regarding it.
@Sessions
private Map<String, Object> sessionMap;
@Execute
public Value<?> execute(@Idx(index = "1", type = TEXT)
@Pkg(label = "[[SessionDemo2.name.label]]")
@NotEmpty
String name) {
if (sessionMap.containsKey(name)) {
return new StringValue(sessionMap.get(name));
}
return new StringValue("session does not exist");
}
// Ensure that a public setter exists.
public void setSessionMap(Map<String, Object> sessionMap) {
this.sessionMap = sessionMap;
}
}