Skip to content
This repository was archived by the owner on Oct 9, 2025. It is now read-only.

Commit 4866f73

Browse files
committed
fix: Reply for compact mode
1 parent 58abd51 commit 4866f73

File tree

3 files changed

+52
-29
lines changed

3 files changed

+52
-29
lines changed

src/Events/messageCreate.ts

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import modifers from '../Scripts/message/messageContentModifiers';
12
import evalScript from '../Scripts/message/evalScript';
23
import messageSendTypes from '../Scripts/message/messageTypes';
34
import { EmbedBuilder, GuildMember, Message, User } from 'discord.js';
@@ -27,9 +28,14 @@ export const usersMap = new Map<string, UserEntries>();
2728
export const blacklistsMap = new Map<string, BlacklistEntries>();
2829
export const warningsMap = new Map<string, WarningEntries>();
2930

31+
export interface MessageInterface extends Message<boolean>{
32+
compactMessage?: string,
33+
uncensoredCompactMessage?: string,
34+
}
35+
3036
export default {
3137
name: 'messageCreate',
32-
async execute(message: Message) {
38+
async execute(message: MessageInterface) {
3339
if (message.author.bot || blacklistsMap.has(message.author.id)) return;
3440

3541
if (message.content.startsWith('c!eval')) evalScript.execute(message);
@@ -48,17 +54,6 @@ export default {
4854
const checks = await require('../Scripts/message/checks').execute(message, database);
4955
if (!checks) return;
5056

51-
if (message.reference) {
52-
const referredMessage = await message.fetchReference();
53-
if (
54-
referredMessage.author.id === message.client.user.id &&
55-
referredMessage.embeds[0] &&
56-
referredMessage.embeds[0].fields?.length > 0
57-
) {
58-
message.content = `> ${referredMessage.embeds[0].fields[0].value}\n${message.content}`;
59-
}
60-
}
61-
6257
const embed = new EmbedBuilder()
6358
.setTimestamp()
6459
.setColor(colors())
@@ -73,17 +68,38 @@ export default {
7368
iconURL: message.guild?.iconURL()?.toString(),
7469
});
7570

76-
await require('../Scripts/message/addBadges').execute(message, database, embed);
71+
message.compactMessage = `**${message.author.tag}:** ${message.content}`;
72+
73+
if (message.reference) {
74+
const messageReferred = await message.fetchReference().catch(() => null);
75+
const messageInDb = await messageData?.findOne({ channelAndMessageIds: { $elemMatch: { messageId: messageReferred?.id } } });
7776

78-
const modifers = require('../Scripts/message/messageContentModifiers').default;
77+
if (messageInDb && messageReferred) {
78+
let embedMessage = messageReferred.embeds[0]?.fields[0]?.value;
79+
const embedFieldName = messageReferred.embeds[0]?.fields[0]?.name;
80+
81+
const compactReferrence = messageReferred.content;
82+
83+
if (embedFieldName?.includes('Reply Message') && embedMessage) embedMessage = embedMessage?.split(/> .*/g)[1].trimStart();
84+
85+
message.content = embedMessage ? `> ${embedMessage}\n${message.content}` : compactReferrence ? `> ${compactReferrence}\n${message.content}` : message.content;
86+
message.compactMessage = embedMessage ? `> ${embedMessage}\n` + message.compactMessage : compactReferrence ? `> ${compactReferrence}\n` + message.compactMessage : message.content;
87+
88+
embed.spliceFields(0, 1, {
89+
name: 'Reply Message',
90+
value: message.content,
91+
});
92+
}
93+
}
94+
95+
96+
await require('../Scripts/message/addBadges').execute(message, database, embed);
7997
const attachments = await modifers.attachmentModifiers(message, embed);
8098

81-
// this embed remains untouched and is not changed in embedModifers
82-
// required for profanity toggle
8399
const uncensoredEmbed = new EmbedBuilder(embed.data);
100+
message.uncensoredCompactMessage = message.compactMessage;
84101

85-
// call this function after uncensoredEmbed is created or it will be modified
86-
await modifers.embedModifers(embed);
102+
await modifers.profanityCensor(embed, message); // FIXME: Does not work for compact messages
87103

88104
// leveling system
89105
// FIXME: Add levelling back when ready

src/Scripts/message/messageContentModifiers.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import fetch from 'node-fetch';
22
import logger from '../../Utils/logger';
33
import { AttachmentBuilder, EmbedBuilder, Message } from 'discord.js';
44
import wordFilter from '../../Utils/functions/wordFilter';
5-
5+
import { MessageInterface } from '../../Events/messageCreate';
66
import 'dotenv/config';
77

88
export default {
@@ -54,10 +54,14 @@ export default {
5454
}
5555
},
5656

57-
async embedModifers(embed: EmbedBuilder) {
57+
async profanityCensor(embed: EmbedBuilder, message: MessageInterface) {
5858
// check if message contains profanity and censor it if it does
5959
if (wordFilter.check(embed.data.fields?.at(0)?.value)) {
6060
embed.setFields({ name: 'Message', value: wordFilter.censor(String(embed.data.fields?.at(0)?.value)) });
6161
}
62+
63+
if (wordFilter.check(message.compactMessage)) {
64+
message.compactMessage = wordFilter.censor(String(message.compactMessage));
65+
}
6266
},
6367
};

src/Scripts/message/messageTypes.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { EmbedBuilder, AttachmentBuilder, Message, TextChannel, MessageMentionTypes, BaseMessageOptions } from 'discord.js';
1+
import { EmbedBuilder, AttachmentBuilder, TextChannel, MessageMentionTypes, BaseMessageOptions } from 'discord.js';
22
import { Collection } from 'mongodb';
3+
import { MessageInterface } from '../../Events/messageCreate';
34
import { connectedListDocument, setupDocument } from '../../Utils/typings/types';
45

56
interface WebhookMessageInterface extends BaseMessageOptions {
6-
content: string,
77
username: string,
88
files?: AttachmentBuilder[],
99
avatarURL: string,
@@ -16,20 +16,23 @@ export default {
1616
*
1717
* @param uncensoredEmbed An embed with the original message content. (uncensored)
1818
*/
19-
execute: async (message: Message, channelObj: connectedListDocument, embed: EmbedBuilder, uncensoredEmbed: EmbedBuilder, setupDb?: Collection, attachments?: AttachmentBuilder) => {
19+
execute: async (message: MessageInterface, channelObj: connectedListDocument, embed: EmbedBuilder, uncensoredEmbed: EmbedBuilder, setupDb?: Collection, attachments?: AttachmentBuilder) => {
2020
const allChannel = message.client.channels.cache.get(channelObj.channelId) as TextChannel;
2121

2222
if (!allChannel) return { unknownChannelId: channelObj.channelId };
2323

2424
const channelInDB = await setupDb?.findOne({ 'channel.id': allChannel.id }) as setupDocument | null | undefined;
2525

26-
if (!channelInDB?.profFilter) embed = uncensoredEmbed;
26+
if (!channelInDB?.profFilter) {
27+
message.compactMessage = String(message.uncensoredCompactMessage);
28+
embed = uncensoredEmbed;
29+
}
2730

2831
if (channelInDB?.compact === true && allChannel.id == message.channel.id) {
29-
return webhookAutomate(message.channel as TextChannel);
32+
return sendCompact(message.channel as TextChannel);
3033
}
3134
else if (channelInDB?.compact === true && allChannel.id == channelInDB.channel.id) {
32-
return webhookAutomate(allChannel);
35+
return sendCompact(allChannel);
3336
}
3437
// TODO: Make sending images a voter only feature, so that random people won't send inappropriate images
3538
else if (attachments) {
@@ -41,16 +44,16 @@ export default {
4144
}
4245

4346

44-
async function webhookAutomate(chan: TextChannel) {
47+
async function sendCompact(chan: TextChannel) {
4548
const webhookMessage: WebhookMessageInterface = {
46-
content: message.content,
49+
content: message.compactMessage,
4750
username: message.author.username,
4851
avatarURL: String(message.author.avatarURL()),
4952
allowedMentions: { parse: [] },
5053
};
5154

5255
const normalMessage: BaseMessageOptions = {
53-
content: `**${message.author.tag}:** ${message.content}`,
56+
content: message.compactMessage,
5457
allowedMentions: { parse: [] },
5558
};
5659

0 commit comments

Comments
 (0)