mirror of
https://gitlab.com/bignutty/labscore.git
synced 2025-06-07 13:43:06 -04:00
82 lines
No EOL
3.4 KiB
JavaScript
82 lines
No EOL
3.4 KiB
JavaScript
|
|
const { createEmbed } = require("#utils/embed");
|
|
const { editOrReply } = require("#utils/message");
|
|
const { icon } = require("#utils/markdown");
|
|
|
|
const { Permissions } = require("detritus-client/lib/constants");
|
|
const { PERMISSION_GROUPS } = require("#constants");
|
|
|
|
// TODO: rework this eventually
|
|
// -> filter by user
|
|
module.exports = {
|
|
label: "filter",
|
|
name: "purge",
|
|
metadata: {
|
|
description: `Removes recent messages in chat. Allows you to optionally filter by message content to remove spam.`,
|
|
description_short: 'Mass-delete recent messages',
|
|
examples: ['purge Spam -amount 25'],
|
|
category: 'mod',
|
|
usage: 'purge [<content>] [-amount <1-50>] [-case <true|false>]'
|
|
},
|
|
args: [
|
|
{default: 20, name: 'amount', type: 'integer', help: "Amount of messages to be checked (1-20)"},
|
|
{default: true, name: 'case', type: 'bool', help: "If provided, should the search query be case sensitive"},
|
|
],
|
|
permissionsClient: [...PERMISSION_GROUPS.baseline, Permissions.MANAGE_MESSAGES],
|
|
permissions: [Permissions.MANAGE_MESSAGES],
|
|
onPermissionsFail: (context) => editOrReply(context, {content: `${icon("failiure_simple")} ${context.message.author.mention}, you are lacking the permission \`Manage Messages\`.`}),
|
|
ratelimit: {
|
|
type: 'guild',
|
|
limit: 1,
|
|
duration: 5000
|
|
},
|
|
permissionsClient: [Permissions.MANAGE_MESSAGES],
|
|
run: async (context, args) => {
|
|
await context.triggerTyping();
|
|
if(isNaN(parseInt(args.amount))) return editOrReply(context, createEmbed("warning", context, "Invalid Amount"))
|
|
|
|
if(args.amount >= 51 || args.amount <= 0){
|
|
return editOrReply(context, { content: `${icon("failiure_simple")} ${context.message.author.mention}, Invalid amount (1-50).`});
|
|
}
|
|
const messages = await context.message.channel.fetchMessages({limit: args.amount});
|
|
let deleteIds = []
|
|
messages.forEach(message => {
|
|
if(args.filter.length >= 1){
|
|
if(message.canDelete && (Date.now() - new Date(message.timestamp)) <= 1209000000){
|
|
if(args.case == false){
|
|
if(message.content.toLowerCase().includes(args.filter.toLowerCase())){
|
|
deleteIds.push(message.id)
|
|
}
|
|
} else {
|
|
if(message.content.includes(args.filter)){
|
|
deleteIds.push(message.id)
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
if(message.canDelete && (Date.now() - new Date(message.timestamp)) <= 1209000000){
|
|
deleteIds.push(message.id)
|
|
}
|
|
}
|
|
})
|
|
|
|
if(deleteIds.length == 0){
|
|
return editOrReply(context, {content:`${icon("failiure_simple")} No messages found.`});
|
|
}
|
|
if(deleteIds.length == 1){
|
|
try{
|
|
await context.client.rest.deleteMessage(context.channel.id, deleteIds[0])
|
|
return editOrReply(context, { content: `${icon("success_simple")} Removed \`1\` message.`});
|
|
}catch(e){
|
|
await editOrReply(context, { content: `${icon("failiure_simple")} Something went wrong while attempting to remove \`1\` message.`});
|
|
}
|
|
} else {
|
|
try{
|
|
await context.client.rest.bulkDeleteMessages(context.channel.id, deleteIds)
|
|
return editOrReply(context, {content: `${icon("success_simple")} Removed \`${deleteIds.length}\` messages.`});
|
|
}catch(e){
|
|
await editOrReply(context, {content:`${icon("failiure_simple")} Something went wrong while attempting to remove \`${deleteIds.length}\` messages.`});
|
|
}
|
|
}
|
|
}
|
|
}; |