Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 38 additions & 21 deletions src/main/java/com/misterveiga/cds/listeners/ReactionListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;

import net.dv8tion.jda.api.exceptions.ErrorHandler;
import net.dv8tion.jda.api.requests.ErrorResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -114,6 +116,11 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
return; // Do nothing.
}

final Action commandAction = new Action();
commandAction.setDate(Instant.now());
commandAction.setUser(reactee.getUser().getAsTag());
commandAction.setDiscordId(reactee.getIdLong());

event.retrieveMessage().queue(message -> {
final String messageLink = message.getJumpUrl();
message.getJDA().getGuildById(message.getGuild().getIdLong())
Expand All @@ -132,11 +139,6 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
return; // Do nothing.
}

final Action commandAction = new Action();
commandAction.setDate(Instant.now());
commandAction.setUser(reactee.getUser().getAsTag());
commandAction.setDiscordId(reactee.getIdLong());

switch (emoteId) {

case ID_REACTION_PURGE_MESSAGES:
Expand All @@ -146,7 +148,7 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
&& RoleUtils.isAnyRole(event.getMember(), RoleUtils.ROLE_SERVER_MANAGER,
RoleUtils.ROLE_MODERATOR, RoleUtils.ROLE_TRIAL_MODERATOR,
RoleUtils.ROLE_BOT)) {
purgeMessagesInChannel(messageAuthor, channel);
purgeMessagesInChannel(messageAuthor.getUser(), channel);
commandAction.setOffendingUser(messageAuthor.getUser().getAsTag());
commandAction.setOffendingUserId(messageAuthor.getIdLong());
commandAction.setActionType("REACTION_PURGE_MESSAGES");
Expand All @@ -162,13 +164,13 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
RoleUtils.ROLE_MODERATOR, RoleUtils.ROLE_BOT)) {
if (event.getChannel().getIdLong() == Properties.CHANNEL_CENSORED_AND_SPAM_LOGS_ID
|| event.getChannel().getIdLong() == Properties.CHANNEL_MESSAGE_LOGS_ID) {
quickMuteFromLogs(reactee, message, commandChannel, "30m");
quickMuteFromLogs(reactee, message, commandChannel, "30m");
log.info("[Reaction Command] 30m Quick-Mute executed by {} ({}) (message: {})",
reactee.getEffectiveName(), reactee.getId(), message.getJumpUrl());
} else if (event.getChannel().getIdLong() != Properties.CHANNEL_MOD_ALERTS_ID) {
if (!isStaffOnStaff(reactee, messageAuthor, commandChannel)) {
muteUser(reactee, messageAuthor, "30m", message, commandChannel);
purgeMessagesInChannel(messageAuthor, channel);
purgeMessagesInChannel(messageAuthor.getUser(), channel);
commandAction.setOffendingUser(messageAuthor.getUser().getAsTag());
commandAction.setOffendingUserId(messageAuthor.getIdLong());
commandAction.setActionType("REACTION_QM_30");
Expand All @@ -189,9 +191,9 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
if (!isStaffOnStaff(reactee, author, commandChannel)) {
muteUser(reactee, author, "30m", alertmessage,
commandChannel);
purgeMessagesInChannel(author,
purgeMessagesInChannel(author.getUser(),
event.getGuild().getTextChannelById(channelId));

}
});
}, alertfailure -> {
Expand Down Expand Up @@ -231,7 +233,7 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
} else if (event.getChannel().getIdLong() != Properties.CHANNEL_MOD_ALERTS_ID) {
if (!isStaffOnStaff(reactee, messageAuthor, commandChannel)) {
muteUser(reactee, messageAuthor, "1h", message, commandChannel);
purgeMessagesInChannel(messageAuthor, channel);
purgeMessagesInChannel(messageAuthor.getUser(), channel);
commandAction.setOffendingUser(messageAuthor.getUser().getAsTag());
commandAction.setOffendingUserId(messageAuthor.getIdLong());
commandAction.setActionType("REACTION_QM_60");
Expand All @@ -252,7 +254,7 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {
if (!isStaffOnStaff(reactee, author, commandChannel)) {
muteUser(reactee, author, "60m", alertmessage,
commandChannel);
purgeMessagesInChannel(author,
purgeMessagesInChannel(author.getUser(),
event.getGuild().getTextChannelById(channelId));
}
});
Expand Down Expand Up @@ -355,7 +357,22 @@ public void onMessageReactionAdd(final MessageReactionAddEvent event) {

cdsData.insertAction(commandAction);

});
}, new ErrorHandler()
.handle(ErrorResponse.UNKNOWN_MEMBER, (no_member) -> {
if (emoteId.equals(ID_REACTION_PURGE_MESSAGES)
&& !isInStaffChannel(reactee, commandChannel, event.getChannel())) {

purgeMessagesInChannel(message.getAuthor(), channel);
commandAction.setOffendingUser(message.getAuthor().getAsTag());
commandAction.setOffendingUserId(message.getAuthor().getIdLong());
commandAction.setActionType("REACTION_PURGE_MESSAGES");

cdsData.insertAction(commandAction);
log.info("[Reaction Command] Message purge executed by {} on {}",
reactee.getUser().getAsTag(), message.getAuthor().getAsTag());
}
})
);

}, (failure) -> {
log.error("An error occurred obtaining a reaction event's message. Details: {}", failure.getMessage());
Expand Down Expand Up @@ -437,13 +454,13 @@ private void quickMuteFromLogs(final Member reactee, final Message message, fina

final String rawMessage = message.getContentRaw();
final String offenderId = rawMessage.substring(rawMessage.indexOf("(`") + 2, rawMessage.indexOf("`)"));
final String offenseReason = rawMessage.split("```")[1];
final String offenseReason = rawMessage.split("```")[1];
final StringBuilder sb = new StringBuilder();

// Construct the command to be sent before adding evidence, then check for evidence length.
// Construct the command to be sent before adding evidence, then check for evidence length.
// Create and send a file and attach its URL to this stringbuilder if evidence length is at least 120 characters and send the command
// If length is less than 120 characters, add the evidence as it's shown in logs to the stringbuilder and send the command

sb.append(String.format(COMMAND_MUTE_USER_DEFAULT, offenderId, muteDuration,
String.format("(Logs message mute approved by "))).append(reactee.getUser().getAsTag()).append(" (")
.append(reactee.getId()).append(") Evidence: ");
Expand Down Expand Up @@ -495,7 +512,7 @@ private void approveLogsBan(final Member reactee, final Message message, final T
final String offenderId = rawMessage.substring(rawMessage.indexOf("(`") + 2, rawMessage.indexOf("`)"));
final String offenseReason = rawMessage.split("```")[1];
final StringBuilder sb = new StringBuilder();

sb.append(String.format(COMMAND_BAN_USER_DEFAULT, offenderId,
String.format("(Logs message ban approved by "))).append(reactee.getUser().getAsTag()).append(" (")
.append(reactee.getId()).append(") Evidence: ");
Expand All @@ -506,13 +523,13 @@ private void approveLogsBan(final Member reactee, final Message message, final T
final String attachmentTitle = new StringBuilder().append("Evidence against ")
.append(commandChannel.getJDA().getUserById(offenderId).getName()).append(" (").append(offenderId).append(") on ")
.append(Instant.now().toString()).toString();

commandChannel.sendFile(offenseReason.getBytes(), attachmentTitle + ".txt").queue(messageWithEvidence -> {
sb.append(offenseReason.replace("\n", " ").substring(0, 17) + "... Full evidence: "
+ messageWithEvidence.getAttachments().get(0).getUrl());
+ messageWithEvidence.getAttachments().get(0).getUrl());
});
}

final String command = sb.toString();
commandChannel.sendMessage(command)
.allowedMentions(new ArrayList<MentionType>()).queue(); // XXX: Remove once appropriate.
Expand Down Expand Up @@ -668,7 +685,7 @@ private void muteUser(final Member reactee, final Member messageAuthor, final St
* @param messageAuthor the message author
* @param channel the channel
*/
private void purgeMessagesInChannel(final Member messageAuthor, final MessageChannel channel) {
private void purgeMessagesInChannel(final User messageAuthor, final MessageChannel channel) {
channel.getIterableHistory().takeAsync(200).thenAccept(messages -> {
final List<Message> messagesToDelete = messages.stream()
.filter(msg -> msg.getAuthor().getIdLong() == messageAuthor.getIdLong())
Expand Down