Use this example as a starting point for moderating messages in Discord.
const lib = require('lib')({token: process.env.STDLIB_SECRET_TOKEN});
const isMod = context.params.event.member.roles.indexOf(process.env.MOD_ROLE_ID) > -1;
if (isMod) {
return;
}
const guildInfo = await lib.discord.guilds['@0.2.4'].retrieve({
guild_id: `${context.params.event.guild_id}`,
});
if (guildInfo.owner_id === context.params.event.author.id) {
return;
}
let flagReason;
let message = context.params.event.content;
const badWords = require('bad-words');
let phraseFilter = new badWords({list: ['crud', 'ick', 'FREE NITRO']});
// Check for banned words or phrases
if (!!phraseFilter.isProfane(message)) {
flagReason = 'banned word';
}
// Check for discord invite links
if (!!message.match(/http(s)?\:\/\/discord\.gg/g)) {
flagReason = 'invite link';
}
if (!!flagReason) {
await lib.discord.channels['@0.3.4'].messages.destroy({
message_id: `${context.params.event.id}`,
channel_id: `${context.params.event.channel_id}`,
});
let violationCount = await lib.utils.kv['@0.1.16'].get({
key: `discord__userFlags__${context.params.event.author.id}`,
defaultValue: 0
});
violationCount += 1;
if (violationCount === 1) {
await lib.discord.guilds['@0.2.4'].members.timeout.update({
user_id: `${context.params.event.author.id}`,
guild_id: `${context.params.event.guild_id}`,
communication_disabled_until_seconds: 300, // 5 minutes
reason: `${flagReason}`,
});
} else if (violationCount === 2) {
await lib.discord.guilds['@0.2.4'].members.destroy({
user_id: `${context.params.event.author.id}`,
guild_id: `${context.params.event.guild_id}`,
});
} else if (violationCount >= 3) {
await lib.discord.guilds['@0.2.4'].bans.create({
user_id: `${context.params.event.author.id}`,
guild_id: `${context.params.event.guild_id}`,
reason: `${flagReason}`,
});
}
await lib.utils.kv['@0.1.16'].set({
key: `discord__userFlags__${context.params.event.author.id}`,
value: violationCount,
});
}