Skip to content

Commit f3f82c1

Browse files
committed
change /help-ping to add random member to thread
1 parent 9e5988e commit f3f82c1

File tree

1 file changed

+35
-16
lines changed

1 file changed

+35
-16
lines changed

src/main/java/net/javadiscord/javabot/systems/help/commands/HelpPingSubcommand.java

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,31 @@
11
package net.javadiscord.javabot.systems.help.commands;
22

3-
import net.dv8tion.jda.api.EmbedBuilder;
3+
import net.dv8tion.jda.api.OnlineStatus;
44
import net.dv8tion.jda.api.entities.Guild;
55
import net.dv8tion.jda.api.entities.Member;
6-
import net.dv8tion.jda.api.entities.Message;
7-
import net.dv8tion.jda.api.entities.MessageEmbed;
86
import net.dv8tion.jda.api.entities.Role;
9-
import net.dv8tion.jda.api.entities.User;
107
import net.dv8tion.jda.api.entities.channel.ChannelType;
118
import net.dv8tion.jda.api.entities.channel.concrete.ThreadChannel;
129
import net.dv8tion.jda.api.events.interaction.command.SlashCommandInteractionEvent;
1310
import net.dv8tion.jda.api.interactions.commands.build.SubcommandData;
1411
import net.javadiscord.javabot.data.config.BotConfig;
1512
import net.javadiscord.javabot.data.config.GuildConfig;
1613
import net.javadiscord.javabot.data.config.guild.HelpConfig;
14+
import net.javadiscord.javabot.util.ExceptionLogger;
1715
import net.javadiscord.javabot.util.Pair;
1816
import net.javadiscord.javabot.util.Responses;
1917
import org.jetbrains.annotations.NotNull;
2018
import xyz.dynxsty.dih4jda.interactions.commands.application.SlashCommand;
2119

22-
import java.util.EnumSet;
20+
import java.time.OffsetDateTime;
21+
import java.util.Collections;
2322
import java.util.List;
2423
import java.util.Map;
2524
import java.util.Set;
2625
import java.util.concurrent.ConcurrentHashMap;
2726
import java.util.concurrent.ScheduledExecutorService;
2827
import java.util.concurrent.TimeUnit;
28+
import java.util.stream.Collectors;
2929

3030
/**
3131
* Handler for the /help ping sub-command that allows users to occasionally ping
@@ -74,25 +74,44 @@ public void execute(@NotNull SlashCommandInteractionEvent event) {
7474
Responses.warning(event, "Sorry, but only the person who reserved this channel, or staff and helpers, may use this command.").queue();
7575
return;
7676
}
77+
if (post.getTimeCreated().isAfter(OffsetDateTime.now().minusSeconds(config.getHelpConfig().getHelpPingTimeoutSeconds()))) {
78+
Responses.warning(event, "Sorry, this command cannot be used directly after a post has been created.").queue();
79+
return;
80+
}
7781
if (isHelpPingTimeoutElapsed(member.getIdLong(), config)) {
7882
lastPingTimes.put(event.getMember().getIdLong(), new Pair<>(System.currentTimeMillis(), config.getGuild()));
7983
Role role = config.getHelpConfig().getHelpPingRole();
80-
event.getChannel().sendMessage(role.getAsMention())
81-
.setAllowedMentions(EnumSet.of(Message.MentionType.ROLE))
82-
.setEmbeds(buildAuthorEmbed(event.getUser()))
83-
.queue();
84-
event.replyFormat("Successfully pinged " + role.getAsMention()).setEphemeral(true).queue();
84+
role.getGuild().findMembersWithRoles(role).onSuccess(members->{
85+
post.retrieveThreadMembers().queue(threadMembers -> {
86+
Set<Long> memberIds = threadMembers
87+
.stream()
88+
.map(m->m.getIdLong())
89+
.collect(Collectors.toSet());
90+
members.removeIf(m ->
91+
m.getOnlineStatus() == OnlineStatus.OFFLINE ||
92+
memberIds.contains(m.getIdLong()));
93+
Collections.shuffle(members);
94+
if(members.size()>0) {
95+
post.addThreadMember(members.get(0)).queue();
96+
event.getHook().sendMessage("Successfully added a user with the help-ping role to the post.").setEphemeral(true).queue();
97+
}else {
98+
event.getHook().sendMessage("Unfortunately, no available member with the help-ping role has been found.").queue();
99+
}
100+
}, err -> {
101+
event.getHook().sendMessage("An error occured trying to find available members").queue();
102+
ExceptionLogger.capture(err, HelpPingSubcommand.class.getName());
103+
});
104+
105+
}).onError(err -> {
106+
event.getHook().sendMessage("An error occured trying to find available members").queue();
107+
ExceptionLogger.capture(err, HelpPingSubcommand.class.getName());
108+
});
109+
event.deferReply(true).queue();
85110
} else {
86111
Responses.warning(event, "Sorry, but you can only use this command occasionally. Please try again later.").queue();
87112
}
88113
}
89114

90-
private @NotNull MessageEmbed buildAuthorEmbed(@NotNull User author) {
91-
return new EmbedBuilder()
92-
.setTitle("Requested by " + author.getAsTag())
93-
.build();
94-
}
95-
96115
/**
97116
* Determines if a user is forbidden from sending a help-ping command due
98117
* to their status in the server.

0 commit comments

Comments
 (0)