|
1 | | -package net.discordjug.javabot.listener; |
| 1 | +package net.discordjug.javabot.listener.filter; |
2 | 2 |
|
3 | 3 | import lombok.RequiredArgsConstructor; |
4 | 4 | import lombok.extern.slf4j.Slf4j; |
5 | 5 | import net.discordjug.javabot.data.config.BotConfig; |
6 | 6 | import net.discordjug.javabot.data.config.SystemsConfig; |
7 | | -import net.discordjug.javabot.systems.moderation.AutoMod; |
8 | 7 | import net.discordjug.javabot.util.MessageActionUtils; |
9 | 8 | import net.discordjug.javabot.util.Responses; |
10 | 9 | import net.dv8tion.jda.api.EmbedBuilder; |
11 | 10 | import net.dv8tion.jda.api.entities.*; |
12 | 11 | import net.dv8tion.jda.api.entities.channel.ChannelType; |
13 | 12 | import net.dv8tion.jda.api.events.message.MessageReceivedEvent; |
14 | | -import net.dv8tion.jda.api.hooks.ListenerAdapter; |
15 | 13 | import net.dv8tion.jda.api.requests.RestAction; |
16 | 14 |
|
17 | 15 | import org.jetbrains.annotations.NotNull; |
| 16 | +import org.springframework.stereotype.Component; |
18 | 17 |
|
19 | 18 | import java.time.Instant; |
20 | 19 |
|
21 | 20 | /** |
22 | | - * Listens for {@link MessageReceivedEvent}s in the |
23 | | - * {@link net.discordjug.javabot.data.config.guild.ModerationConfig#getSuggestionChannel()} channel. |
| 21 | + * When a message is created in the {@link net.discordjug.javabot.data.config.guild.ModerationConfig#getSuggestionChannel()} channel, it is decorated as a suggestion. |
24 | 22 | */ |
| 23 | +@Component |
25 | 24 | @Slf4j |
26 | 25 | @RequiredArgsConstructor |
27 | | -public class SuggestionListener extends ListenerAdapter { |
28 | | - private final AutoMod autoMod; |
| 26 | +public class SuggestionFilter implements MessageFilter { |
29 | 27 | private final BotConfig botConfig; |
30 | | - |
| 28 | + |
31 | 29 | @Override |
32 | | - public void onMessageReceived(@NotNull MessageReceivedEvent event) { |
33 | | - if (!canCreateSuggestion(event)) return; |
34 | | - if (autoMod.hasSuspiciousLink(event.getMessage()) || autoMod.hasAdvertisingLink(event.getMessage())) { |
35 | | - event.getMessage().delete().queue(); |
36 | | - return; |
37 | | - } |
38 | | - MessageEmbed embed = buildSuggestionEmbed(event.getMessage()); |
39 | | - MessageActionUtils.addAttachmentsAndSend(event.getMessage(), event.getChannel().sendMessageEmbeds(embed)).thenAccept(message -> { |
| 30 | + public MessageModificationStatus processMessage(MessageContent content) { |
| 31 | + if (!canCreateSuggestion(content.event())) return MessageModificationStatus.NOT_MODIFIED; |
| 32 | + MessageEmbed embed = buildSuggestionEmbed(content.messageText().toString(), content.event().getMember()); |
| 33 | + MessageActionUtils.addAttachmentsAndSend(content.attachments(), content.event().getChannel().sendMessageEmbeds(embed)) |
| 34 | + .thenAccept(message -> { |
40 | 35 | addReactions(message).queue(); |
41 | | - event.getMessage().delete().queue(); |
42 | | - message.createThreadChannel(String.format("%s — Suggestion", event.getAuthor().getName())) |
43 | | - .flatMap(thread -> thread.addThreadMember(event.getAuthor())) |
| 36 | + content.event().getMessage().delete().queue(); |
| 37 | + message.createThreadChannel(String.format("%s — Suggestion", content.event().getAuthor().getName())) |
| 38 | + .flatMap(thread -> thread.addThreadMember(content.event().getAuthor())) |
44 | 39 | .queue(); |
45 | 40 | } |
46 | 41 | ).exceptionally(e -> { |
47 | 42 | log.error("Could not send Submission Embed", e); |
48 | 43 | return null; |
49 | 44 | }); |
| 45 | + return MessageModificationStatus.STOP_PROCESSING; |
50 | 46 | } |
51 | | - |
| 47 | + |
52 | 48 | /** |
53 | 49 | * Decides whether the message author is eligible to create new suggestions. |
54 | 50 | * |
@@ -76,19 +72,21 @@ private RestAction<?> addReactions(Message message) { |
76 | 72 | ); |
77 | 73 | } |
78 | 74 |
|
79 | | - |
80 | | - |
81 | | - private MessageEmbed buildSuggestionEmbed(Message message) { |
82 | | - Member member = message.getMember(); |
| 75 | + private MessageEmbed buildSuggestionEmbed(String messageContent, Member member) { |
83 | 76 | // Note: member will never be null in practice. This is to satisfy code analysis tools. |
84 | 77 | if (member == null) throw new IllegalStateException("Member was null when building suggestion embed."); |
85 | 78 | return new EmbedBuilder() |
86 | 79 | .setTitle("Suggestion") |
87 | 80 | .setAuthor(member.getEffectiveName(), null, member.getEffectiveAvatarUrl()) |
88 | 81 | .setColor(Responses.Type.DEFAULT.getColor()) |
89 | 82 | .setTimestamp(Instant.now()) |
90 | | - .setDescription(message.getContentRaw()) |
91 | | - .setFooter(message.getAuthor().getId()) |
| 83 | + .setDescription(messageContent) |
| 84 | + .setFooter(member.getId()) |
92 | 85 | .build(); |
93 | 86 | } |
| 87 | + |
| 88 | + @Override |
| 89 | + public int getOrder() { |
| 90 | + return LOWEST_PRECEDENCE; |
| 91 | + } |
94 | 92 | } |
0 commit comments