-
Notifications
You must be signed in to change notification settings - Fork 0
Custom Decorators
As Halpbot is built using Hartshorn, it's very easy to override the built-in decorators or to create entirely new decorators.
It is possible to override the built-in decorators by binding a custom implementation with a higher priority than the default implementation. All Halpbot default implementations use a priority of -1, so any priority of 0+ will be used preferentially when constructing the decorator. It's important to note that all decorators must have a @Bound constructor of an ActionInvokable<C> and the decorator annotation.
Example: Overriding the @Log decorator
The basic format any custom-decorators is like so:
// @Binds indicates that this implementation defines the LogDecorator and should be used in the factory rather than the default
// LogDecorator due to the higher priority
@Binds(value = LogDecorator.class, priority = 0)
// All Decorators take in a generic parameter 'C extends InvocationContext' as they can be used by any action,
// each of which have their own InvocationContext
public class CustomLogDecorator<C extends InvocationContext> extends LogDecorator<C>
{
// @Bound specifies that this constructor should be used by the factory to create this decorator
@Bound
public CustomLogDecorator(ActionInvokable<C> actionInvokable, Log log) {
super(actionInvokable, log);
}
}In this custom decorator, we can then override any of the ActionInvokable<C> methods. In this case, let's override the Invoke(C invocationContext) method and make it log the exact message sent (Assuming that the action was invoked using a MessageReceivedEvent).
Note: Actions aren't limited to message commands, such as buttons, so it's important to check the instance of the event.
- Built-in Commands
- @Command Parameters
- Arguments
- Annotations
- Custom Objects
- Custom TypeParsers
- Slash Commands - W.I.P.
- Pagination - W.I.P