Plugin
MessagePurge
Purges messages from a channel
1
/*2
* FiveCord — a Discord client mod3
* Copyright (c) 2025 FiveCord4
* SPDX-License-Identifier: GPL-3.0-or-later5
*/6
7
import { ApplicationCommandInputType, ApplicationCommandOptionType, findOption, sendBotMessage } from "@api/Commands";8
import { loggedMessages } from "@plugins/messageLoggerEnhanced/LoggedMessageManager";9
import { Devs } from "@utils/constants";10
import definePlugin from "@utils/types";11
import { findByPropsLazy } from "@webpack";12
import { MessageStore, UserStore } from "@webpack/common";13
import { Channel, Message } from "discord-types/general";14
15
const MessageActions = findByPropsLazy("deleteMessage", "startEditMessage");16
17
async function DeleteMessages(amount: number, channel: Channel, delay: number = 1500) {18
const userId = UserStore.getCurrentUser().id;19
const messages: Message[] = MessageStore.getMessages(channel.id)._array.filter((m: Message) => m.author.id === userId).reverse();20
const parsedMessages: Message[] = JSON.parse(JSON.stringify(messages));21
const uniqueMessages: Message[] = parsedMessages.filter(message => !loggedMessages.deletedMessages[channel.id].includes(message.id));22
23
for (const message of uniqueMessages) {24
MessageActions.deleteMessage(channel.id, message.id);25
amount--;26
if (amount === 0) break;27
await new Promise(resolve => setTimeout(resolve, delay));28
}29
}30
31
export default definePlugin({32
name: "MessagePurge",33
description: "Purges messages from a channel",34
dependencies: ["CommandsAPI"],35
authors: [Devs.FiveCord],36
commands: [37
{38
name: "purge",39
description: "Purge a chosen amount of messages from a channel",40
options: [41
{42
name: "amount",43
description: "How many messages you wish to purge",44
type: ApplicationCommandOptionType.INTEGER,45
required: true46
},47
{48
name: "channel",49
description: "Channel ID you wish to purge from",50
type: ApplicationCommandOptionType.CHANNEL,51
required: false52
},53
{54
name: "delay",55
description: "Delay inbetween deleting messages",56
type: ApplicationCommandOptionType.INTEGER,57
required: false58
}59
],60
inputType: ApplicationCommandInputType.BUILT_IN,61
execute: async (opts, ctx) => {62
const amount: number = findOption(opts, "amount", 0);63
const channel: Channel = findOption(opts, "channel", ctx.channel);64
const delay: number = findOption(opts, "delay", 1500);65
66
sendBotMessage(ctx.channel.id, {67
content: `> deleting ${amount} messages.`68
});69
70
DeleteMessages(amount, channel, delay).then(() => {71
sendBotMessage(ctx.channel.id,72
{73
content: `> deleted ${amount} messages`74
}75
);76
});77
},78
}79
],80
});81