115 lines
3.6 KiB
JavaScript
115 lines
3.6 KiB
JavaScript
const { DebugBuilder } = require("../utilities/debugBuilder");
|
|
const log = new DebugBuilder("server", "linkCop");
|
|
|
|
const { linkCopInsults } = require('../extras/linkCopInsults');
|
|
|
|
const linkRegExp = /(?:http[s]?:\/\/)?(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)/g
|
|
// Langvars that can be used in the insults
|
|
// Mention the posting user
|
|
const mtnUsrRegExp = /\{\%mtn_user\%\}/g
|
|
// Reference the original message
|
|
const refOgMsgRegExp = /\{\%ref_og_msg\%\}/g
|
|
// Reference the channel the original message was posted in
|
|
const refOgChannelRegExp = /\{\%ref_og_channel\%\}/g
|
|
// Reference the links from the original message
|
|
const refLinksRegExp = /\{\%ref_links\%\}/g
|
|
|
|
const restrictedChannelIds = [
|
|
'757379843792044102',
|
|
'367396189529833474',
|
|
"918029426397184000"
|
|
]
|
|
|
|
const approvedLinksChannel = "767303243285790721";
|
|
|
|
async function replaceLangVars(messageContent, selectedInsult) {
|
|
selectedInsult = String(selectedInsult)
|
|
selectedInsult = selectedInsult.replace(mtnUsrRegExp, messageContent.author);
|
|
selectedInsult = selectedInsult.replace(refOgMsgRegExp, messageContent.content);
|
|
selectedInsult = selectedInsult.replace(refOgChannelRegExp, `<#${messageContent.channelId}>`);
|
|
selectedInsult = selectedInsult.replace(refLinksRegExp, Array(messageContent.links).join(", "));
|
|
|
|
return selectedInsult;
|
|
}
|
|
|
|
exports.linkCop = async (message) => {
|
|
if (!restrictedChannelIds.includes(message.channelId)) return;
|
|
const client = message.client;
|
|
log.DEBUG("Message Content: ", message.content);
|
|
|
|
log.VERBOSE("Interaction: ", message);
|
|
const urls = String(message.content).matchAll(linkRegExp);
|
|
if (!urls || urls.length === 0) return;
|
|
log.DEBUG("Found URLs: ", urls);
|
|
|
|
const messageContent = {
|
|
'author': message.author,
|
|
'content': String(message.content),
|
|
'channelId': message.channelId,
|
|
'links': urls
|
|
}
|
|
|
|
await message.delete();
|
|
|
|
var selectedInsult = linkCopInsults[Math.floor(Math.random()*linkCopInsults.length)];
|
|
const finalMessage = await replaceLangVars(messageContent, selectedInsult);
|
|
log.DEBUG("Final Message: ", finalMessage);
|
|
|
|
log.VERBOSE("Client: ", client.guilds);
|
|
|
|
client.channels.get(approvedLinksChannel).send(finalMessage);
|
|
}
|
|
|
|
/* TODO
|
|
- Get the message to send, getting an error because client.guilds and .channels doesn't have functions
|
|
- Make sure the links are added to the final message
|
|
*/
|
|
|
|
/*
|
|
Message {
|
|
channelId: '918029426397184000',
|
|
guildId: '367396189529833472',
|
|
id: '1101346007087845437',
|
|
createdTimestamp: 1682651750109,
|
|
type: 0,
|
|
system: false,
|
|
content: '<@943742040255115304> asd',
|
|
author: User {
|
|
id: '301507932678520833',
|
|
bot: false,
|
|
system: false,
|
|
flags: UserFlagsBitField { bitfield: 0 },
|
|
username: 'Logan',
|
|
discriminator: '3331',
|
|
avatar: null,
|
|
banner: undefined,
|
|
accentColor: undefined
|
|
},
|
|
pinned: false,
|
|
tts: false,
|
|
nonce: '1101346006672343040',
|
|
embeds: [],
|
|
components: [],
|
|
attachments: Collection(0) [Map] {},
|
|
stickers: Collection(0) [Map] {},
|
|
position: null,
|
|
editedTimestamp: null,
|
|
reactions: ReactionManager { message: [Circular *1] },
|
|
mentions: MessageMentions {
|
|
everyone: false,
|
|
users: Collection(1) [Map] { '943742040255115304' => [ClientUser] },
|
|
roles: Collection(0) [Map] {},
|
|
_members: null,
|
|
_channels: null,
|
|
_parsedUsers: null,
|
|
crosspostedChannels: Collection(0) [Map] {},
|
|
repliedUser: null
|
|
},
|
|
webhookId: null,
|
|
groupActivityApplication: null,
|
|
applicationId: null,
|
|
activity: null,
|
|
flags: MessageFlagsBitField { bitfield: 0 },
|
|
reference: null,
|
|
interaction: null
|
|
} */ |