From b715f2a154d904810e9a2cf3e184b8161241d88d Mon Sep 17 00:00:00 2001 From: Christian Blos Date: Mon, 5 Oct 2020 18:05:25 +0200 Subject: [PATCH 1/3] Be able to add AbilityExtensions in Bot constructor --- .../org/telegram/abilitybots/api/bot/BaseAbilityBot.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java index 317f222f..01b18da4 100644 --- a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java +++ b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java @@ -106,6 +106,7 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability private final String botUsername; // Ability registry + protected final List extensions = new ArrayList<>(); private Map abilities; private Map stats; @@ -280,10 +281,10 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability private void registerAbilities() { try { // Collect all classes that implement AbilityExtension declared in the bot - List extensions = stream(getClass().getMethods()) + extensions.addAll(stream(getClass().getMethods()) .filter(checkReturnType(AbilityExtension.class)) .map(returnExtension(this)) - .collect(Collectors.toList()); + .collect(Collectors.toList())); // Add the bot itself as it is an AbilityExtension extensions.add(this); From 247ca5f984b6371d79c4742d1ca066fbef1d39fd Mon Sep 17 00:00:00 2001 From: Christian Blos Date: Thu, 8 Oct 2020 15:46:31 +0200 Subject: [PATCH 2/3] Don't expose extensions in BaseAbilityBot --- .../abilitybots/api/bot/BaseAbilityBot.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java index 01b18da4..455a43ae 100644 --- a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java +++ b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/BaseAbilityBot.java @@ -106,7 +106,7 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability private final String botUsername; // Ability registry - protected final List extensions = new ArrayList<>(); + private final List extensions = new ArrayList<>(); private Map abilities; private Map stats; @@ -273,6 +273,18 @@ public abstract class BaseAbilityBot extends DefaultAbsSender implements Ability return false; } + protected void addExtension(AbilityExtension extension) { + this.extensions.add(extension); + } + + protected void addExtensions(AbilityExtension... extensions) { + this.extensions.addAll(Arrays.asList(extensions)); + } + + protected void addExtensions(Collection extensions) { + this.extensions.addAll(extensions); + } + /** * Registers the declared abilities using method reflection. Also, replies are accumulated using the built abilities and standalone methods that return a Reply. *

From 3f07bfdff11b1f38945af7c6218f80122534fa29 Mon Sep 17 00:00:00 2001 From: Christian Blos Date: Thu, 8 Oct 2020 16:11:45 +0200 Subject: [PATCH 3/3] Updated ExtensionTest and wiki --- TelegramBots.wiki/abilities/Ability-Extensions.md | 14 ++++++++++++++ .../abilitybots/api/bot/ExtensionTest.java | 2 ++ 2 files changed, 16 insertions(+) diff --git a/TelegramBots.wiki/abilities/Ability-Extensions.md b/TelegramBots.wiki/abilities/Ability-Extensions.md index 60f5a482..45481632 100644 --- a/TelegramBots.wiki/abilities/Ability-Extensions.md +++ b/TelegramBots.wiki/abilities/Ability-Extensions.md @@ -35,6 +35,20 @@ public class MrBadGuy implements AbilityExtension { return new MrBadGuy(); } + // Override creatorId + } +``` + +It's also possible to add extensions in the constructor by using the `addExtension()` or `addExtensions()` method: + +```java + public class YourAwesomeBot implements AbilityBot { + + public YourAwesomeBot() { + super(/* pass required args ... */); + addExtensions(new MrGoodGuy(), new MrBadGuy()); + } + // Override creatorId } ``` \ No newline at end of file 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 8be53c13..2593c696 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 @@ -32,6 +32,7 @@ class ExtensionTest { assertTrue(hasAbilityNamed("direct"), "Failed to find Ability in directly declared in root extension/bot"); assertTrue(hasAbilityNamed("returningSuperClass0abc"), "Failed to find Ability in directly declared in extension returned by method returning the AbilityExtension class"); assertTrue(hasAbilityNamed("returningSubClass0abc"), "Failed to find Ability in directly declared in extension returned by method returning the AbilityExtension subclass"); + assertTrue(hasAbilityNamed("addedInConstructor0abc"), "Failed to find Ability in directly declared in extension added in the constructor"); } private boolean hasAbilityNamed(String name) { @@ -41,6 +42,7 @@ class ExtensionTest { public static class ExtensionUsingBot extends AbilityBot { ExtensionUsingBot() { super("", "", offlineInstance("testing")); + addExtension(new AbilityBotExtension("addedInConstructor")); } @Override