-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Creating a command module in Oktane is as simple as creating a class;
public class MyFirstModule extends ModuleBase<CommandContext> {
}
And adding our first command is just adding a method that returns CommandResult
with the Aliases
annotation;
public class MyFirstModule extends ModuleBase<CommandContext> {
@Aliases("ping")
public CommandResult pong() {
return message("pong");
}
}
ModuleBase
defines a handful of useful method for returning simple results, e.g. message
to represent a simple text response, and nop
to convey no-operation.
For integration with Reactor a command can also return Mono<CommandResult>
;
public class MyFirstModule extends ModuleBase<CommandContext> {
@Aliases("ping")
public Mono<CommandResult> pong() {
return PingService.get()
.map(Response::getContent)
.map(this::message);
}
}
The CommandHandler
serves as a layer for interacting with your commands, setting up the handler is as simple as;
var handler = CommandHandler.<CommandContext>builder()
.withModules(MyFirstModule.class, CommandContext.class)
.build();
The withModules
method will find all of the command modules within a package and add them to the handler, otherwise the withModule
method can be used to add a specific module.
Once you have your handler setup executing a command is a simple call to CommandHandler#execute
;
var result = handler.execute("ping", new CommandContext());