Skip to content

Commit 5fe1d32

Browse files
committed
use club.minnced:discord-webhooks for replacing fucks with hugs
1 parent 22710d6 commit 5fe1d32

File tree

2 files changed

+42
-35
lines changed

2 files changed

+42
-35
lines changed

build.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ dependencies {
3636

3737
// Quartz scheduler
3838
implementation("org.quartz-scheduler:quartz:2.3.2")
39+
40+
// Webhooks
41+
implementation("club.minnced:discord-webhooks:0.8.0")
3942

4043
// Lombok Annotations
4144
compileOnly("org.projectlombok:lombok:1.18.24")
Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
package net.javadiscord.javabot.listener;
22

3-
import java.util.Collections;
43
import java.util.List;
54
import java.util.Optional;
65
import java.util.concurrent.CompletableFuture;
76

87
import 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;
1114
import net.dv8tion.jda.api.entities.GuildMessageChannel;
1215
import net.dv8tion.jda.api.entities.Message;
1316
import net.dv8tion.jda.api.entities.Message.Attachment;
1417
import net.dv8tion.jda.api.entities.TextChannel;
1518
import net.dv8tion.jda.api.entities.Webhook;
16-
import net.dv8tion.jda.api.entities.WebhookType;
1719
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
1820
import 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;
2221
import 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

Comments
 (0)