Update wiki to show how to access AbilityBot.silent in AbilityExtension implemented class, update ExtensionTest to show change
This commit is contained in:
parent
2663d01761
commit
7dd0711cdb
@ -2,41 +2,48 @@
|
|||||||
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.
|
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.
|
||||||
```java
|
```java
|
||||||
public class MrGoodGuy implements AbilityExtension {
|
public class MrGoodGuy implements AbilityExtension {
|
||||||
|
private AbilityBot extensionUser;
|
||||||
|
|
||||||
|
public MrGoodGuy(AbilityBot extensionUser) { this.extensionUser = extensionUser; }
|
||||||
|
|
||||||
public Ability nice() {
|
public Ability nice() {
|
||||||
return Ability.builder()
|
return Ability.builder()
|
||||||
.name("nice")
|
.name("nice")
|
||||||
.privacy(PUBLIC)
|
.privacy(PUBLIC)
|
||||||
.locality(ALL)
|
.locality(ALL)
|
||||||
.action(ctx -> silent.send("You're awesome!", ctx.chatId())
|
.action(ctx -> extensionUser.silent().send("You're awesome!", ctx.chatId())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MrBadGuy implements AbilityExtension {
|
public class MrBadGuy implements AbilityExtension {
|
||||||
|
private AbilityBot extensionUser;
|
||||||
|
|
||||||
|
public MrBadGuy(AbilityBot extensionUser) { this.extensionUser = extensionUser; }
|
||||||
public Ability notnice() {
|
public Ability notnice() {
|
||||||
return Ability.builder()
|
return Ability.builder()
|
||||||
.name("notnice")
|
.name("notnice")
|
||||||
.privacy(PUBLIC)
|
.privacy(PUBLIC)
|
||||||
.locality(ALL)
|
.locality(ALL)
|
||||||
.action(ctx -> silent.send("You're horrible!", ctx.chatId())
|
.action(ctx -> extensionUser.silent().send("You're horrible!", ctx.chatId())
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class YourAwesomeBot implements AbilityBot {
|
public class YourAwesomeBot implements AbilityBot {
|
||||||
|
|
||||||
// Constructor for your bot
|
// Constructor for your bot
|
||||||
|
|
||||||
public AbilityExtension goodGuy() {
|
public AbilityExtension goodGuy() {
|
||||||
return new MrGoodGuy();
|
return new MrGoodGuy(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbilityExtension badGuy() {
|
public AbilityExtension badGuy() {
|
||||||
return new MrBadGuy();
|
return new MrBadGuy(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override creatorId
|
// Override creatorId
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
It's also possible to add extensions in the constructor by using the `addExtension()` or `addExtensions()` method:
|
It's also possible to add extensions in the constructor by using the `addExtension()` or `addExtensions()` method:
|
||||||
@ -46,9 +53,9 @@ It's also possible to add extensions in the constructor by using the `addExtensi
|
|||||||
|
|
||||||
public YourAwesomeBot() {
|
public YourAwesomeBot() {
|
||||||
super(/* pass required args ... */);
|
super(/* pass required args ... */);
|
||||||
addExtensions(new MrGoodGuy(), new MrBadGuy());
|
addExtensions(new MrGoodGuy(this), new MrBadGuy(this));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Override creatorId
|
// Override creatorId
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -43,7 +43,7 @@ class ExtensionTest {
|
|||||||
public static class ExtensionUsingBot extends AbilityBot {
|
public static class ExtensionUsingBot extends AbilityBot {
|
||||||
ExtensionUsingBot() {
|
ExtensionUsingBot() {
|
||||||
super("", "", offlineInstance("testing"));
|
super("", "", offlineInstance("testing"));
|
||||||
addExtension(new AbilityBotExtension("addedInConstructor"));
|
addExtension(new AbilityBotExtension("addedInConstructor", this));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -52,11 +52,11 @@ class ExtensionTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public AbilityBotExtension methodReturningExtensionSubClass() {
|
public AbilityBotExtension methodReturningExtensionSubClass() {
|
||||||
return new AbilityBotExtension("returningSubClass");
|
return new AbilityBotExtension("returningSubClass", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbilityExtension methodReturningExtensionSuperClass() {
|
public AbilityExtension methodReturningExtensionSuperClass() {
|
||||||
return new AbilityBotExtension("returningSuperClass");
|
return new AbilityBotExtension("returningSuperClass", this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ability methodReturningAbility() {
|
public Ability methodReturningAbility() {
|
||||||
@ -73,9 +73,11 @@ class ExtensionTest {
|
|||||||
|
|
||||||
public static class AbilityBotExtension implements AbilityExtension {
|
public static class AbilityBotExtension implements AbilityExtension {
|
||||||
private String name;
|
private String name;
|
||||||
|
private AbilityBot extensionUser;
|
||||||
|
|
||||||
AbilityBotExtension(String name) {
|
AbilityBotExtension(String name, AbilityBot extensionUser) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
|
this.extensionUser = extensionUser;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Ability abc() {
|
public Ability abc() {
|
||||||
@ -85,6 +87,7 @@ class ExtensionTest {
|
|||||||
.locality(ALL)
|
.locality(ALL)
|
||||||
.privacy(PUBLIC)
|
.privacy(PUBLIC)
|
||||||
.action(ctx -> {
|
.action(ctx -> {
|
||||||
|
extensionUser.silent().send("This is a test message.", ctx.chatId());
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user