From 7dd0711cdb55b0f68b87fb23b6890788e23756da Mon Sep 17 00:00:00 2001 From: nubdub Date: Thu, 9 Dec 2021 00:23:35 -0500 Subject: [PATCH 1/2] Update wiki to show how to access AbilityBot.silent in AbilityExtension implemented class, update ExtensionTest to show change --- .../abilities/Ability-Extensions.md | 67 ++++++++++--------- .../abilitybots/api/bot/ExtensionTest.java | 39 ++++++----- 2 files changed, 58 insertions(+), 48 deletions(-) diff --git a/TelegramBots.wiki/abilities/Ability-Extensions.md b/TelegramBots.wiki/abilities/Ability-Extensions.md index 83ee9fa5..eb7b0441 100644 --- a/TelegramBots.wiki/abilities/Ability-Extensions.md +++ b/TelegramBots.wiki/abilities/Ability-Extensions.md @@ -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. ```java public class MrGoodGuy implements AbilityExtension { - public Ability nice() { - return Ability.builder() - .name("nice") - .privacy(PUBLIC) - .locality(ALL) - .action(ctx -> silent.send("You're awesome!", ctx.chatId()) - ); - } + 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 { - public Ability notnice() { - return Ability.builder() - .name("notnice") - .privacy(PUBLIC) - .locality(ALL) - .action(ctx -> silent.send("You're horrible!", ctx.chatId()) - ); - } - } - - public class YourAwesomeBot implements AbilityBot { - + 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(); + return new MrGoodGuy(this); } - + public AbilityExtension badGuy() { - return new MrBadGuy(); + return new MrBadGuy(this); } - + // Override creatorId - } +} ``` It's also possible to add extensions in the constructor by using the `addExtension()` or `addExtensions()` method: @@ -45,10 +52,10 @@ It's also possible to add extensions in the constructor by using the `addExtensi public class YourAwesomeBot implements AbilityBot { public YourAwesomeBot() { - super(/* pass required args ... */); - addExtensions(new MrGoodGuy(), new MrBadGuy()); + super(/* pass required args ... */); + addExtensions(new MrGoodGuy(this), new MrBadGuy(this)); } - + // Override creatorId - } +} ``` diff --git a/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java b/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java index 67b3e469..1f0e6735 100644 --- a/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java +++ b/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java @@ -43,7 +43,7 @@ class ExtensionTest { public static class ExtensionUsingBot extends AbilityBot { ExtensionUsingBot() { super("", "", offlineInstance("testing")); - addExtension(new AbilityBotExtension("addedInConstructor")); + addExtension(new AbilityBotExtension("addedInConstructor", this)); } @Override @@ -52,41 +52,44 @@ class ExtensionTest { } public AbilityBotExtension methodReturningExtensionSubClass() { - return new AbilityBotExtension("returningSubClass"); + return new AbilityBotExtension("returningSubClass", this); } public AbilityExtension methodReturningExtensionSuperClass() { - return new AbilityBotExtension("returningSuperClass"); + return new AbilityBotExtension("returningSuperClass", this); } public Ability methodReturningAbility() { return Ability.builder() - .name("direct") - .info("Test ability") - .locality(ALL) - .privacy(PUBLIC) - .action(messageContext -> { - }) - .build(); + .name("direct") + .info("Test ability") + .locality(ALL) + .privacy(PUBLIC) + .action(messageContext -> { + }) + .build(); } } public static class AbilityBotExtension implements AbilityExtension { private String name; + private AbilityBot extensionUser; - AbilityBotExtension(String name) { + AbilityBotExtension(String name, AbilityBot extensionUser) { this.name = name; + this.extensionUser = extensionUser; } public Ability abc() { return Ability.builder() - .name(name + "0abc") - .info("Test ability") - .locality(ALL) - .privacy(PUBLIC) - .action(ctx -> { - }) - .build(); + .name(name + "0abc") + .info("Test ability") + .locality(ALL) + .privacy(PUBLIC) + .action(ctx -> { + extensionUser.silent().send("This is a test message.", ctx.chatId()); + }) + .build(); } } } \ No newline at end of file From 2963971fa3ce05778d39c6bd4ee863065c871cc1 Mon Sep 17 00:00:00 2001 From: nubdub Date: Fri, 10 Dec 2021 20:39:15 -0500 Subject: [PATCH 2/2] Add javadoc and comments --- .../abilitybots/api/bot/ExtensionTest.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java b/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java index 1f0e6735..293cdbe6 100644 --- a/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java +++ b/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/ExtensionTest.java @@ -41,7 +41,11 @@ class ExtensionTest { } public static class ExtensionUsingBot extends AbilityBot { + /** + * Constructor for ExtensionUsingBot + */ ExtensionUsingBot() { + // https://github.com/rubenlagus/TelegramBots/issues/834 super("", "", offlineInstance("testing")); addExtension(new AbilityBotExtension("addedInConstructor", this)); } @@ -51,11 +55,21 @@ class ExtensionTest { return 0; } + /** + * Method for returning AbiltyExtension + * @return AbilityBotExtension instance + */ public AbilityBotExtension methodReturningExtensionSubClass() { + // https://github.com/rubenlagus/TelegramBots/issues/834 return new AbilityBotExtension("returningSubClass", this); } + /** + * Method for returning AbilityExtension + * @return AbiltyBotExtension instance + */ public AbilityExtension methodReturningExtensionSuperClass() { + // https://github.com/rubenlagus/TelegramBots/issues/834 return new AbilityBotExtension("returningSuperClass", this); } @@ -75,8 +89,15 @@ class ExtensionTest { private String name; private AbilityBot extensionUser; + /** + * https://github.com/rubenlagus/TelegramBots/issues/721 + * Constructor for AbilityBotExtension + * @param name Name of the ability extension + * @param extensionUser The AbilityBot that uses this AbilityExtension + */ AbilityBotExtension(String name, AbilityBot extensionUser) { this.name = name; + // https://github.com/rubenlagus/TelegramBots/issues/834 this.extensionUser = extensionUser; } @@ -87,6 +108,7 @@ class ExtensionTest { .locality(ALL) .privacy(PUBLIC) .action(ctx -> { + // https://github.com/rubenlagus/TelegramBots/issues/834 extensionUser.silent().send("This is a test message.", ctx.chatId()); }) .build();