diff --git a/src/main/java/it/cavallium/PrimaryController.java b/src/main/java/it/cavallium/PrimaryController.java index 2f918ab..9d2ac0d 100644 --- a/src/main/java/it/cavallium/PrimaryController.java +++ b/src/main/java/it/cavallium/PrimaryController.java @@ -85,7 +85,7 @@ public class PrimaryController { destItems2.clear(); } else { boolean added = false; - if (supergroupInfo.getItem().canRestrictMembers()) { + if (supergroupInfo.getItem().canRestrictMembers() || !REMOVE_MEMBERS_FROM_SOURCE_SUPERGROUP) { if (!srcItems2.contains(supergroupInfo.getItem().getBaseChatInfo())) { added |= srcItems2.add(supergroupInfo.getItem().getBaseChatInfo()); } diff --git a/src/main/java/it/cavallium/SettingsServiceImpl.java b/src/main/java/it/cavallium/SettingsServiceImpl.java index 9206b6b..56e3917 100644 --- a/src/main/java/it/cavallium/SettingsServiceImpl.java +++ b/src/main/java/it/cavallium/SettingsServiceImpl.java @@ -28,7 +28,7 @@ public class SettingsServiceImpl implements SettingsService { this.delayBetweenAdds.set(Duration.ofSeconds(seconds.getAsInt())); }); } - } catch (IOException e) { + } catch (Exception e) { e.printStackTrace(); }; } diff --git a/src/main/java/it/cavallium/TransferClient.java b/src/main/java/it/cavallium/TransferClient.java index 69056a2..f233abe 100644 --- a/src/main/java/it/cavallium/TransferClient.java +++ b/src/main/java/it/cavallium/TransferClient.java @@ -6,6 +6,7 @@ import it.tdlight.jni.TdApi.AuthorizationStateReady; import it.tdlight.jni.TdApi.Chat; import it.tdlight.jni.TdApi.ChatMemberStatusAdministrator; import it.tdlight.jni.TdApi.ChatMemberStatusCreator; +import it.tdlight.jni.TdApi.ChatMemberStatusMember; import it.tdlight.jni.TdApi.GetSupergroupFullInfo; import it.tdlight.jni.TdApi.Object; import it.tdlight.jni.TdApi.Supergroup; @@ -104,16 +105,33 @@ public class TransferClient { private Mono onUpdateSupergroup(Supergroup supergroup) { // Fast checks to ignore most unwanted infos - if (!supergroup.isChannel - && - (supergroup.status.getConstructor() == ChatMemberStatusAdministrator.CONSTRUCTOR - || supergroup.status.getConstructor() == ChatMemberStatusCreator.CONSTRUCTOR)) { - if (supergroupInfos.put(supergroup.id, supergroup) == null) { - return this - .send(new GetSupergroupFullInfo(supergroup.id)) - .filter(TdResult::succeeded) - .map(TdResult::result) - .flatMap(supergroupFullInfo -> onUpdateSupergroupFullInfo(supergroup.id, supergroupFullInfo)); + if (!supergroup.isChannel) { + boolean isRelevantSupergroup = false; + + if (supergroup.status.getConstructor() == ChatMemberStatusAdministrator.CONSTRUCTOR + || supergroup.status.getConstructor() == ChatMemberStatusCreator.CONSTRUCTOR) { + isRelevantSupergroup = true; + } else if (!StaticSettings.requiresAdminPrivilegesOnSourceSupergroup()) { + switch (supergroup.status.getConstructor()) { + case ChatMemberStatusCreator.CONSTRUCTOR: + case ChatMemberStatusAdministrator.CONSTRUCTOR: + case ChatMemberStatusMember.CONSTRUCTOR: + isRelevantSupergroup = true; + break; + default: + isRelevantSupergroup = false; + break; + } + } + + if (isRelevantSupergroup) { + if (supergroupInfos.put(supergroup.id, supergroup) == null) { + + return this.send(new GetSupergroupFullInfo(supergroup.id)) + .filter(TdResult::succeeded) + .map(TdResult::result) + .flatMap(supergroupFullInfo -> onUpdateSupergroupFullInfo(supergroup.id, supergroupFullInfo)); + } } } return Mono.empty(); @@ -165,6 +183,16 @@ public class TransferClient { var adminStatus = (ChatMemberStatusAdministrator) baseInfo.status; var sgInfo = new SupergroupInfo(baseChatInfo, adminStatus.canRestrictMembers, adminStatus.canInviteUsers); return Optional.of(sgInfo); + } else if (!StaticSettings.requiresAdminPrivilegesOnSourceSupergroup()) { + switch (baseInfo.status.getConstructor()) { + case ChatMemberStatusCreator.CONSTRUCTOR: + case ChatMemberStatusAdministrator.CONSTRUCTOR: + case ChatMemberStatusMember.CONSTRUCTOR: + var sgInfo = new SupergroupInfo(baseChatInfo, false, false); + return Optional.of(sgInfo); + default: + return Optional.empty(); + } } else { return Optional.empty(); }