2.0 KiB
2.0 KiB
Ability Extensions
You have around 100 abilities in your bot and you're looking for a way to refactor that mess into more modular classes. AbillityExtension
is here to support just that! It's not a secret that AbilityBot uses refactoring backstage to be able to construct all of your abilities and map them accordingly. However, AbilityBot searches initially for all methods that return an AbilityExtension
type. Then, those extensions will be used to search for declared abilities. Here's an example.
public class MrGoodGuy implements AbilityExtension {
private AbilityBot extensionUser;
public MrGoodGuy(AbilityBot extensionUser) { this.extensionUser = extensionUser; }
public Ability nice() {
return Ability.builder()
.name("nice")
.privacy(PUBLIC)
.locality(ALL)
.action(ctx -> extensionUser.silent().send("You're awesome!", ctx.chatId())
);
}
}
public class MrBadGuy implements AbilityExtension {
private AbilityBot extensionUser;
public MrBadGuy(AbilityBot extensionUser) { this.extensionUser = extensionUser; }
public Ability notnice() {
return Ability.builder()
.name("notnice")
.privacy(PUBLIC)
.locality(ALL)
.action(ctx -> extensionUser.silent().send("You're horrible!", ctx.chatId())
);
}
}
public class YourAwesomeBot implements AbilityBot {
// Constructor for your bot
public AbilityExtension goodGuy() {
return new MrGoodGuy(this);
}
public AbilityExtension badGuy() {
return new MrBadGuy(this);
}
// Override creatorId
}
It's also possible to add extensions in the constructor by using the addExtension()
or addExtensions()
method:
public class YourAwesomeBot implements AbilityBot {
public YourAwesomeBot() {
super(/* pass required args ... */);
addExtensions(new MrGoodGuy(this), new MrBadGuy(this));
}
// Override creatorId
}