Skip to content

Commit 11a6e87

Browse files
committed
Fix bugs related to bot status
1 parent 08f4575 commit 11a6e87

File tree

5 files changed

+41
-22
lines changed

5 files changed

+41
-22
lines changed

src/main/java/net/clementraynaud/skoice/listeners/interaction/component/StringSelectInteractionListener.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -77,12 +77,17 @@ public void onStringSelectInteraction(StringSelectInteractionEvent event) {
7777
}
7878

7979
if (guild.getId().equals(server.getValue())) {
80-
ConfigurationMenus.getFromMessageId(event.getMessageId()).ifPresent(menu -> menu.deleteFromHook(success -> guildToLeave.leave().queue()));
80+
ConfigurationMenus.getFromMessageId(event.getMessageId())
81+
.ifPresent(menu -> menu.delete(event, success -> guildToLeave.leave().queue()));
8182
} else {
8283
guildToLeave.leave().queue();
8384
}
8485
}
8586
}
87+
88+
if (!event.isAcknowledged()) {
89+
ConfigurationMenus.getFromMessageId(event.getMessageId()).ifPresent(menu -> menu.refreshId().edit(event));
90+
}
8691
break;
8792

8893
case "language-selection":

src/main/java/net/clementraynaud/skoice/menus/EmbeddedMenu.java

+5-8
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,11 @@ public void editFromHook() {
8484
.queue(null, new ErrorHandler().handle(ErrorResponse.UNKNOWN_MESSAGE, e -> this.forget()));
8585
}
8686

87-
public void deleteFromHook(Consumer<Void> success) {
88-
if (this.hook == null || this.hook.isExpired()) {
89-
return;
90-
}
91-
92-
this.hook.deleteOriginal()
93-
.queue(success.andThen(e -> this.forget()), new ErrorHandler().handle(ErrorResponse.UNKNOWN_MESSAGE, e -> this.forget()));
94-
this.hook = null;
87+
public void delete(IMessageEditCallback interaction, Consumer<Void> success) {
88+
interaction.getHook().deleteOriginal()
89+
.queue(success.andThen(e -> this.forget()),
90+
new ErrorHandler().handle(ErrorResponse.UNKNOWN_MESSAGE, e -> this.forget())
91+
);
9592
}
9693

9794
protected void forget() {

src/main/java/net/clementraynaud/skoice/system/ListenerManager.java

+5-7
Original file line numberDiff line numberDiff line change
@@ -81,14 +81,12 @@ public void update(User user) {
8181
this.plugin.getBot().getCommands().getAsMention(CommandInfo.LINK.toString()))
8282
.message(user);
8383
}
84-
} else if (newStatus != BotStatus.READY) {
85-
if (oldStatus == BotStatus.READY) {
86-
this.unregisterMinecraftListeners();
87-
if (newStatus != BotStatus.NOT_CONNECTED) {
88-
this.unregisterBotListeners();
89-
}
84+
} else if (oldStatus == BotStatus.READY && newStatus != BotStatus.READY) {
85+
this.unregisterMinecraftListeners();
86+
if (newStatus != BotStatus.NOT_CONNECTED) {
87+
this.unregisterBotListeners();
88+
new InterruptSystemTask(this.plugin).run();
9089
}
91-
new InterruptSystemTask(this.plugin).run();
9290
}
9391
}
9492

src/main/java/net/clementraynaud/skoice/system/ProximityChannels.java

+10
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,16 @@ public static void clean(int possibleUsers) {
106106
});
107107
}
108108

109+
public static void clear() {
110+
try {
111+
if (Bukkit.isPrimaryThread() && Bukkit.getPluginManager().isPluginEnabled("Skoice")) {
112+
new IllegalStateException("This method should not be called from the main thread.").printStackTrace();
113+
}
114+
} catch (NullPointerException ignored) {
115+
}
116+
ProximityChannels.proximityChannelSet.clear();
117+
}
118+
109119
public static boolean isProximityChannel(String voiceChannelId) {
110120
return ProximityChannels.getInitialized().stream()
111121
.map(ProximityChannel::getChannelId)

src/main/java/net/clementraynaud/skoice/tasks/InterruptSystemTask.java

+15-6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import net.clementraynaud.skoice.system.Networks;
2626
import net.clementraynaud.skoice.system.ProximityChannel;
2727
import net.clementraynaud.skoice.system.ProximityChannels;
28+
import net.dv8tion.jda.api.Permission;
29+
import net.dv8tion.jda.api.entities.Guild;
2830
import net.dv8tion.jda.api.entities.Member;
2931
import net.dv8tion.jda.api.entities.channel.concrete.VoiceChannel;
3032
import net.dv8tion.jda.internal.utils.tuple.Pair;
@@ -51,31 +53,38 @@ public void run() {
5153
value.getRight().cancel(true);
5254
}
5355

54-
VoiceChannel voiceChannel = this.plugin.getConfigYamlFile().getVoiceChannel();
56+
Guild guild = this.plugin.getBot().getGuild();
5557

56-
if (this.plugin.getBot().isAdministrator()) {
58+
if (guild != null
59+
&& guild.getSelfMember().hasPermission(Permission.ADMINISTRATOR)
60+
&& (guild.getRequiredMFALevel() != Guild.MFALevel.TWO_FACTOR_AUTH
61+
|| this.plugin.getBot().getJDA().getSelfUser().isMfaEnabled())) {
62+
VoiceChannel voiceChannel = this.plugin.getConfigYamlFile().getVoiceChannel();
5763
for (ProximityChannel proximityChannel : ProximityChannels.getInitialized()) {
5864
if (voiceChannel != null) {
5965
for (int i = 0; i < proximityChannel.getChannel().getMembers().size(); i++) {
6066
Member member = proximityChannel.getChannel().getMembers().get(i);
61-
if (i + 1 < proximityChannel.getChannel().getMembers().size()
62-
|| this.plugin.isEnabled()) {
67+
if (i + 1 < proximityChannel.getChannel().getMembers().size()) {
6368
member.getGuild()
6469
.moveVoiceMember(member, voiceChannel)
6570
.queue();
71+
} else if (this.plugin.isEnabled()) {
72+
member.getGuild()
73+
.moveVoiceMember(member, voiceChannel)
74+
.queue(sucess -> proximityChannel.delete());
6675
} else {
6776
member.getGuild()
6877
.moveVoiceMember(member, voiceChannel)
6978
.complete();
79+
proximityChannel.delete();
7080
}
7181
}
7282
}
73-
proximityChannel.delete();
7483
}
7584
}
7685

77-
Networks.getAll().forEach(Network::clear);
7886
Networks.clear();
87+
ProximityChannels.clear();
7988

8089
if (this.plugin.isEnabled()) {
8190
this.plugin.getServer().getScheduler().runTask(this.plugin, () -> {

0 commit comments

Comments
 (0)