From b9da279fdffdb118bb0af323c9df35abc304c1e1 Mon Sep 17 00:00:00 2001 From: Abbas Abou Daya Date: Tue, 8 May 2018 03:16:20 +0300 Subject: [PATCH 1/2] Remove group update check for GROUP_ADMIN GetChatAdministrators only returns admins when there IS a group, there's no need to explicitly check for groups here. --- .../abilitybots/api/bot/AbilityBot.java | 2 +- .../abilitybots/api/objects/Flag.java | 2 +- .../abilitybots/api/util/AbilityUtils.java | 22 +++++++++++++++++++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java index a9c4e0e3..bbabe4c3 100644 --- a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java +++ b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java @@ -650,7 +650,7 @@ public abstract class AbilityBot extends TelegramLongPollingBot { private boolean isGroupAdmin(Update update, int id) { GetChatAdministrators admins = new GetChatAdministrators().setChatId(getChatId(update)); - return isGroupUpdate(update) && silent.execute(admins) + return silent.execute(admins) .orElse(new ArrayList<>()).stream() .anyMatch(member -> member.getUser().getId() == id); } diff --git a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/objects/Flag.java b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/objects/Flag.java index 8b03175e..645646b5 100644 --- a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/objects/Flag.java +++ b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/objects/Flag.java @@ -11,7 +11,7 @@ import static java.util.Objects.nonNull; /** * Flags are an conditions that are applied on an {@link Update}. *

- * They can be used on {@link AbilityBuilder#flag(Flag...)} and on the post conditions in {@link AbilityBuilder#reply(Consumer, Predicate[])}. + * They can be used on {@link AbilityBuilder#flag(Predicate[])} and on the post conditions in {@link AbilityBuilder#reply(Consumer, Predicate[])}. * * @author Abbas Abou Daya */ diff --git a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/util/AbilityUtils.java b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/util/AbilityUtils.java index 8852170f..6e313df4 100644 --- a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/util/AbilityUtils.java +++ b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/util/AbilityUtils.java @@ -86,6 +86,28 @@ public final class AbilityUtils { } } + /** + * A "best-effort" boolean stating whether the update is a super-group message or not. + * + * @param update a Telegram {@link Update} + * @return whether the update is linked to a group + */ + public static boolean isSuperGroupUpdate(Update update) { + if (MESSAGE.test(update)) { + return update.getMessage().isSuperGroupMessage(); + } else if (CALLBACK_QUERY.test(update)) { + return update.getCallbackQuery().getMessage().isSuperGroupMessage(); + } else if (CHANNEL_POST.test(update)) { + return update.getChannelPost().isSuperGroupMessage(); + } else if (EDITED_CHANNEL_POST.test(update)) { + return update.getEditedChannelPost().isSuperGroupMessage(); + } else if (EDITED_MESSAGE.test(update)) { + return update.getEditedMessage().isSuperGroupMessage(); + } else { + return false; + } + } + /** * Fetches the direct chat ID of the specified update. * From 677b401fc63d60d53cf700d2cbcc684938f6a97b Mon Sep 17 00:00:00 2001 From: Abbas Abou Daya Date: Tue, 8 May 2018 03:39:21 +0300 Subject: [PATCH 2/2] Check if the message is a group or super group message for GROUP_ADMIN, #390 --- .../java/org/telegram/abilitybots/api/bot/AbilityBot.java | 2 +- .../java/org/telegram/abilitybots/api/bot/AbilityBotTest.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java index bbabe4c3..c2024f46 100644 --- a/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java +++ b/telegrambots-abilities/src/main/java/org/telegram/abilitybots/api/bot/AbilityBot.java @@ -637,7 +637,7 @@ public abstract class AbilityBot extends TelegramLongPollingBot { Privacy privacy; int id = user.id(); - privacy = isCreator(id) ? CREATOR : isAdmin(id) ? ADMIN : isGroupAdmin(update, id)? GROUP_ADMIN : PUBLIC; + privacy = isCreator(id) ? CREATOR : isAdmin(id) ? ADMIN : (isGroupUpdate(update) || isSuperGroupUpdate(update)) && isGroupAdmin(update, id)? GROUP_ADMIN : PUBLIC; boolean isOk = privacy.compareTo(trio.b().privacy()) >= 0; diff --git a/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/AbilityBotTest.java b/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/AbilityBotTest.java index ff335720..29b26e01 100644 --- a/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/AbilityBotTest.java +++ b/telegrambots-abilities/src/test/java/org/telegram/abilitybots/api/bot/AbilityBotTest.java @@ -362,7 +362,7 @@ public class AbilityBotTest { } @Test - public void canValidateGroupAdminPrivacy() throws TelegramApiException { + public void canValidateGroupAdminPrivacy() { Update update = mock(Update.class); Message message = mock(Message.class); org.telegram.telegrambots.api.objects.User user = mock(User.class); @@ -383,7 +383,7 @@ public class AbilityBotTest { } @Test - public void canRestrictNormalUsersFromGroupAdminAbilities() throws TelegramApiException { + public void canRestrictNormalUsersFromGroupAdminAbilities() { Update update = mock(Update.class); Message message = mock(Message.class); org.telegram.telegrambots.api.objects.User user = mock(User.class);