11package net .javadiscord .javabot .listener ;
22
3- import java .util .Collections ;
43import java .util .List ;
54import java .util .Optional ;
65import java .util .concurrent .CompletableFuture ;
76
87import javax .annotation .Nonnull ;
98
10- import net .dv8tion .jda .api .entities .BaseGuildMessageChannel ;
9+ import club .minnced .discord .webhook .WebhookClientBuilder ;
10+ import club .minnced .discord .webhook .external .JDAWebhookClient ;
11+ import club .minnced .discord .webhook .send .AllowedMentions ;
12+ import club .minnced .discord .webhook .send .WebhookMessageBuilder ;
13+ import net .dv8tion .jda .api .entities .ChannelType ;
1114import net .dv8tion .jda .api .entities .GuildMessageChannel ;
1215import net .dv8tion .jda .api .entities .Message ;
1316import net .dv8tion .jda .api .entities .Message .Attachment ;
1417import net .dv8tion .jda .api .entities .TextChannel ;
1518import net .dv8tion .jda .api .entities .Webhook ;
16- import net .dv8tion .jda .api .entities .WebhookType ;
1719import net .dv8tion .jda .api .events .message .MessageReceivedEvent ;
1820import net .dv8tion .jda .api .hooks .ListenerAdapter ;
19- import net .dv8tion .jda .api .utils .AttachmentOption ;
20- import net .dv8tion .jda .internal .entities .WebhookImpl ;
21- import net .dv8tion .jda .internal .requests .restaction .WebhookMessageActionImpl ;
2221import net .javadiscord .javabot .Bot ;
2322
2423/**
@@ -33,76 +32,81 @@ public void onMessageReceived(@Nonnull MessageReceivedEvent event) {
3332 if (Bot .autoMod .hasSuspiciousLink (event .getMessage ()) || Bot .autoMod .hasAdvertisingLink (event .getMessage ())) {
3433 return ;
3534 }
36- TextChannel tc =event .getTextChannel ();
35+ TextChannel tc = null ;
36+ if (event .isFromType (ChannelType .TEXT )) {
37+ tc = event .getTextChannel ();
38+ }
3739 if (event .isFromThread ()) {
3840 GuildMessageChannel parentChannel = event .getThreadChannel ().getParentMessageChannel ();
3941 if (parentChannel instanceof TextChannel textChannel ) {
40- tc = textChannel ;
42+ tc = textChannel ;
4143 }
4244 }
43- if (tc == null ) {
45+ if (tc == null ) {
4446 return ;
4547 }
46- final TextChannel textChannel = tc ;
47- String content = event .getMessage ().getContentRaw ();
48- String lowerCaseContent = content .toLowerCase ();
48+ final TextChannel textChannel = tc ;
49+ String content = event .getMessage ().getContentRaw ();
50+ String lowerCaseContent = content .toLowerCase ();
4951 if (lowerCaseContent .contains ("fuck" )) {
50- StringBuilder sb =new StringBuilder (content .length ());
51- int index =0 ;
52- int indexBkp =index ;
53- while ((index =lowerCaseContent .indexOf ("fuck" ,index ))!=-1 ) {
52+ long threadId = event .isFromThread ()?event .getThreadChannel ().getIdLong ():0 ;
53+ StringBuilder sb = new StringBuilder (content .length ());
54+ int index = 0 ;
55+ int indexBkp = index ;
56+ while ((index = lowerCaseContent .indexOf ("fuck" ,index )) != -1 ) {
5457 sb .append (content .substring (indexBkp ,index ));
5558 sb .append ("hug" );
56- indexBkp =index +++4 ;
59+ indexBkp =index ++ +4 ;
5760 }
5861
5962 sb .append (content .substring (indexBkp ,content .length ()));
6063 event .getMessage ().delete ().queue (unused ->{
6164 textChannel .retrieveWebhooks ().queue (webhooks ->{
6265 Optional <Webhook > hook = webhooks
6366 .stream ()
64- .filter (webhook ->webhook .getChannel ().getIdLong ()== event .getChannel ().getIdLong ())
67+ .filter (webhook ->webhook .getChannel ().getIdLong () == event .getChannel ().getIdLong ())
6568 .filter (wh ->wh .getToken ()!=null )
6669 .findAny ();
6770 if (hook .isPresent ()) {
68- buildMessage (hook .get (), event .getMessage (), sb .toString (),( BaseGuildMessageChannel ) event . getGuildChannel () );
71+ sendWebhookMessage (hook .get (), event .getMessage (), sb .toString (),threadId );
6972 }else {
7073 textChannel
7174 .createWebhook ("JavaBot-hug" )
7275 .queue (wh ->
73- buildMessage (wh , event .getMessage (), sb .toString (),( BaseGuildMessageChannel ) event . getGuildChannel () )
76+ sendWebhookMessage (wh , event .getMessage (), sb .toString (), threadId )
7477 );
7578 }
7679 });
7780 });
7881 }
7982 }
8083
81- private void buildMessage (Webhook webhook , Message originalMessage , String newMessageContent , BaseGuildMessageChannel channel ){
82- WebhookImpl webhookImpl = new WebhookImpl (channel , webhook .getJDA (), webhook .getIdLong (), WebhookType .INCOMING );
83- webhookImpl .setToken (webhook .getToken ());
84- WebhookMessageActionImpl <Void > ret = webhookImpl
85- .sendMessage (newMessageContent )
86- .allowedMentions (Collections .emptyList ());
84+ private void sendWebhookMessage (Webhook webhook , Message originalMessage , String newMessageContent , long threadId ){
85+ JDAWebhookClient client = new WebhookClientBuilder (webhook .getIdLong (), webhook .getToken ())
86+ .setThreadId (threadId )
87+ .buildJDA ();
88+ WebhookMessageBuilder message = new WebhookMessageBuilder ()
89+ .setContent (newMessageContent )
90+ .setAllowedMentions (AllowedMentions .none ())
91+ .setAvatarUrl (originalMessage .getMember ().getEffectiveAvatarUrl ())
92+ .setUsername (originalMessage .getMember ().getEffectiveName ());
8793
8894 List <Attachment > attachments = originalMessage .getAttachments ();
8995 @ SuppressWarnings ("unchecked" )
90- CompletableFuture <?>[] futures =new CompletableFuture <?>[attachments .size ()];
91-
96+ CompletableFuture <?>[] futures = new CompletableFuture <?>[attachments .size ()];
9297 for (int i = 0 ; i < attachments .size (); i ++){
9398 Attachment attachment = attachments .get (i );
94- futures [i ]= attachment
99+ futures [i ] = attachment
95100 .getProxy ()
96101 .download ()
97- .thenAccept (is ->
98- ret .addFile (
99- is ,
100- attachment .getFileName (),
101- attachment .isSpoiler () ? new AttachmentOption [] { AttachmentOption .SPOILER } : new AttachmentOption [0 ]
102+ .thenAccept (is ->
103+ message .addFile (
104+ (attachment .isSpoiler ()?"SPOILER_" :"" )+attachment .getFileName (),
105+ is
102106 )
103107 );
104108 }
105109 CompletableFuture .allOf (futures )
106- .thenAccept (unused ->ret . queue ( ));
110+ .thenAccept (unused ->client . send ( message . build () ));
107111 }
108112}
0 commit comments