11package net .neoforged .camelot .module .filepreview ;
22
33import net .dv8tion .jda .api .JDABuilder ;
4+ import net .dv8tion .jda .api .entities .Guild ;
45import net .dv8tion .jda .api .entities .Message ;
56import net .dv8tion .jda .api .entities .emoji .Emoji ;
67import net .dv8tion .jda .api .entities .messages .MessageSnapshot ;
78import net .dv8tion .jda .api .events .message .MessageReceivedEvent ;
89import net .dv8tion .jda .api .events .message .react .MessageReactionAddEvent ;
910import net .neoforged .camelot .ModuleProvider ;
1011import net .neoforged .camelot .ap .RegisterCamelotModule ;
12+ import net .neoforged .camelot .api .config .ConfigOption ;
13+ import net .neoforged .camelot .api .config .type .ChannelFilter ;
14+ import net .neoforged .camelot .api .config .type .Options ;
1115import net .neoforged .camelot .config .module .FilePreview ;
1216import net .neoforged .camelot .module .api .CamelotModule ;
1317import net .neoforged .camelot .util .Emojis ;
2529
2630@ RegisterCamelotModule
2731public class FilePreviewModule extends CamelotModule .Base <FilePreview > {
28- public FilePreviewModule (ModuleProvider .Context context ) {
29- super (context , FilePreview .class );
30- }
31-
3232 private static final Emoji EMOJI = Emojis .MANAGER .getLazyEmoji ("gist" );
3333 private static final Pattern CODEBLOCK_PATTERN = Pattern .compile ("`{3}(?<lang>\\ w*)\\ n(?<content>[\\ s\\ S]*?)\\ n`{3}" , Pattern .MULTILINE );
3434 private static final Random RANDOM = new Random ();
3535
36+ private final ConfigOption <Guild , Boolean > enabled ;
37+ private final ConfigOption <Guild , ChannelFilter > allowedChannels ;
38+
39+ public FilePreviewModule (ModuleProvider .Context context ) {
40+ super (context , FilePreview .class );
41+
42+ var registrar = context .guildConfigs ().groupDisplayName ("File Preview" );
43+ enabled = registrar
44+ .option ("enabled" , Options .bool ())
45+ .displayName ("Enabled" )
46+ .description ("Whether file previews are enabled in this server." )
47+ .defaultValue (true )
48+ .register ();
49+
50+ allowedChannels = registrar
51+ .option ("allowed_channels" , Options .channelFilter ())
52+ .displayName ("Allowed channels" )
53+ .description ("Channels in which gists may be created from attachments." )
54+ .dependsOn (enabled , true )
55+ .register ();
56+ }
57+
3658 @ Override
3759 public String id () {
3860 return "file-preview" ;
@@ -46,6 +68,8 @@ public boolean shouldLoad() {
4668 @ Override
4769 public void registerListeners (JDABuilder builder ) {
4870 builder .addEventListeners (Utils .listenerFor (MessageReceivedEvent .class , event -> {
71+ if (event .isFromGuild () && (!enabled .get (event .getGuild ()) || !allowedChannels .get (event .getGuild ()).test (event .getChannel ()))) return ;
72+
4973 if (messageMatches (event .getMessage ())) {
5074 event .getMessage ().addReaction (EMOJI ).queue ();
5175 }
0 commit comments