From dc13faea549e5530cebc5a255b1c8fc3b59ef99e Mon Sep 17 00:00:00 2001 From: Benjamin Kyd Date: Sat, 1 Aug 2020 21:03:37 +0100 Subject: [PATCH] A few more events and AJDS integration --- src/{discordmiddleware.js => ajds-core.js} | 0 ...discordcommands.js => discord-commands.js} | 4 +- ...mbedbuilder.js => discord-embedbuilder.js} | 0 src/{discordevents.js => discord-events.js} | 139 ++++++++++++++++-- src/{discordhelpers.js => discord-helpers.js} | 0 src/discord-middleware.js | 0 src/discord.js | 4 +- src/index.js | 4 +- 8 files changed, 133 insertions(+), 18 deletions(-) rename src/{discordmiddleware.js => ajds-core.js} (100%) rename src/{discordcommands.js => discord-commands.js} (96%) rename src/{discordembedbuilder.js => discord-embedbuilder.js} (100%) rename src/{discordevents.js => discord-events.js} (76%) rename src/{discordhelpers.js => discord-helpers.js} (100%) create mode 100644 src/discord-middleware.js diff --git a/src/discordmiddleware.js b/src/ajds-core.js similarity index 100% rename from src/discordmiddleware.js rename to src/ajds-core.js diff --git a/src/discordcommands.js b/src/discord-commands.js similarity index 96% rename from src/discordcommands.js rename to src/discord-commands.js index 8f187ec..6894b78 100644 --- a/src/discordcommands.js +++ b/src/discord-commands.js @@ -2,8 +2,8 @@ const Logger = require('./logger.js'); const Database = require('./database.js'); const Discord = require('./discord.js'); -const DiscordHelpers = require('./discordhelpers.js'); -const DiscordEmbed = require('./discordembedbuilder.js'); +const DiscordHelpers = require('./discord-helpers.js'); +const DiscordEmbed = require('./discord-embedbuilder.js'); let Commands = []; diff --git a/src/discordembedbuilder.js b/src/discord-embedbuilder.js similarity index 100% rename from src/discordembedbuilder.js rename to src/discord-embedbuilder.js diff --git a/src/discordevents.js b/src/discord-events.js similarity index 76% rename from src/discordevents.js rename to src/discord-events.js index 41628c5..b2377d5 100644 --- a/src/discordevents.js +++ b/src/discord-events.js @@ -1,10 +1,10 @@ const Logger = require('./logger.js'); const Database = require('./database.js'); -const Commands = require('./discordcommands.js'); +const Commands = require('./discord-commands.js'); const Discord = require('./discord.js'); -const DiscordHelpers = require('./discordhelpers.js'); -const DiscordEmbed = require('./discordembedbuilder.js'); +const DiscordHelpers = require('./discord-helpers.js'); +const DiscordEmbed = require('./discord-embedbuilder.js'); const Eris = require('eris'); @@ -18,12 +18,12 @@ module.exports.setup = async function() Discord.bot.on('channelDelete', async (channel) => {ChannelDelete(channel)}); Discord.bot.on('channelPinUpdate', async (channel, timestamp, oldtimestamp) => {ChannelPinUpdate(channel, timestamp, oldtimestamp)}); Discord.bot.on('channelUpdate', async (channel, oldchannel) => {ChannelUpdate(channel, oldchannel)}); - Discord.bot.on('guildBanAdd', async (guild, user) => {}); - Discord.bot.on('guildBanRemove', async (guild, user) => {}); + Discord.bot.on('guildBanAdd', async (guild, user) => {GuildBanAdd(guild, user)}); + Discord.bot.on('guildBanRemove', async (guild, user) => {GuildBanRemove(guild, user)}); Discord.bot.on('guildCreate', async (guild) => {}); Discord.bot.on('guildDelete', async (guild) => {}); - Discord.bot.on('guildEmojisUpdate', async (guild, emojis, oldemojis) => {}); - Discord.bot.on('guildMemberAdd', async (guild, member) => {}); + Discord.bot.on('guildEmojisUpdate', async (guild, emojis, oldemojis) => {GuildEmojisUpdate(guild, emojis, oldemojis)}); + Discord.bot.on('guildMemberAdd', async (guild, member) => {GuildMemberAdd(guild, member)}); Discord.bot.on('guildMemberRemove', async (guild, member) => {}); Discord.bot.on('guildMemberUpdate', async (guild, member, oldmember) => {}); Discord.bot.on('guildRoleCreate', async (guild, role) => {}); @@ -60,7 +60,7 @@ module.exports.setup = async function() } } -// Handlers +// Handlers / Helpers async function GetLogChannel(guildID) { @@ -94,13 +94,43 @@ function BuildObjDiff(before, after) { return ret; } +// Non-logable events + +async function GuildCreate(guild) +{ + +} + +async function GuildDelete(guild) +{ + +} + +async function Warn(message, id) +{ + +} + +async function Error(error, id) +{ + +} + +async function Disconnect(options) +{ + +} + // Richembed defines // update: blue #328FA8 // delete / leave: red #E0532B // create / join: green #42A832 -// everything else: yellow #A84C32 +// everything else: yellow #F0F03A // customisable features in the future? +// would do website logging before return if fallback +// channel is undefined + async function ChannelCreate(channel) { if (!channel.guild) return; @@ -265,8 +295,6 @@ async function ChannelUpdate(channel, oldchannel) // extend map which is a pretty generic unordered // map (in js basically an array lmao) - - // Role overwrite added for (perm of newperm) { @@ -318,7 +346,7 @@ async function ChannelUpdate(channel, oldchannel) // or a deleted one, a diff must be constructed // TODO : make an ambigous role overwrite diff - + // gonna skip this for now, need an overwriter method } @@ -326,6 +354,93 @@ async function ChannelUpdate(channel, oldchannel) { } +} +async function GuildBanAdd(guild, user) +{ + const FallbackChannel = await GetLogChannel(guild.id); + if (FallbackChannel == -1) return; + + const ModCases = (await Database.FetchGuild(guild.id)).modcases; + // Doesn't need to be async - if it fails it's not the end of the world + Database.IncrementGuildModCases(guild.id); + + // 22 is member ban add + const LastBanLog = await guild.getAuditLogs(1, undefined, 22); + const Ban = await guild.getBan(user.id); + + const BanReason = Ban.reason ? Ban.reason : 'No Reason Given'; + const Banner = await Discord.bot.getRESTUser(LastBanLog.users[0].id); + + let embed = new DiscordEmbed({ + author: { + name: `${user.username}#${user.discriminator}`, + icon_url: user.avatarURL, + url: 'https://logori.xyz' + }, + title: `${user.username}#${user.discriminator} Was Banned`, + description: `Mod Case: ${ModCases}`, + timestamp: new Date(), + footer: { text: `ID: ${user.id}` } + }); + + embed.field('​', `**Name**: ${user.mention} + **Responsible Moderator**: ${Banner.mention} + **Reason**: ${BanReason}`, false); + + embed.colour('#F0F03A'); + embed.url('https://logori.xyz') + + Discord.bot.createMessage(FallbackChannel, { embed: embed.sendable }); +} + +async function GuildBanRemove(guild, user) +{ + const FallbackChannel = await GetLogChannel(guild.id); + if (FallbackChannel == -1) return; + + const ModCases = (await Database.FetchGuild(guild.id)).modcases; + // Doesn't need to be async - if it fails it's not the end of the world + Database.IncrementGuildModCases(guild.id); + + // 23 is member ban remove + const LastBanLog = await guild.getAuditLogs(1, undefined, 23); + const Banner = await Discord.bot.getRESTUser(LastBanLog.users[0].id); + + let embed = new DiscordEmbed({ + author: { + name: `${user.username}#${user.discriminator}`, + icon_url: user.avatarURL, + url: 'https://logori.xyz' + }, + title: `${user.username}#${user.discriminator} Was UnBanned`, + description: `Mod Case: ${ModCases}`, + timestamp: new Date(), + footer: { text: `ID: ${user.id}` } + }); + + embed.field('​', `**Name**: ${user.mention} + **Responsible Moderator**: ${Banner.mention}`, false); + + embed.colour('#F0F03A'); + embed.url('https://logori.xyz') + + Discord.bot.createMessage(FallbackChannel, { embed: embed.sendable }); +} + +async function GuildEmojisUpdate(guild, emojis, oldemojis) +{ } + +async function GuildMemberAdd(guild, member) +{ + // This function implements AJDS (Anti-James-Defense-System) + // which uses user heuristics to determine a users risk to + // a discord server, and with a high enough risk factor, notify + // the appropriate moderators + + + +} + diff --git a/src/discordhelpers.js b/src/discord-helpers.js similarity index 100% rename from src/discordhelpers.js rename to src/discord-helpers.js diff --git a/src/discord-middleware.js b/src/discord-middleware.js new file mode 100644 index 0000000..e69de29 diff --git a/src/discord.js b/src/discord.js index c092a35..fc3148a 100644 --- a/src/discord.js +++ b/src/discord.js @@ -1,6 +1,6 @@ const Logger = require('./logger.js'); -const Events = require('./discordevents.js'); -const Commands = require('./discordcommands.js'); +const Events = require('./discord-events.js'); +const Commands = require('./discord-commands.js'); const fs = require('fs'); diff --git a/src/index.js b/src/index.js index 7de9584..ff7993b 100644 --- a/src/index.js +++ b/src/index.js @@ -7,13 +7,14 @@ require('dotenv').config() module.exports.main = async function() { Logger.SetLevel(Logger.VERBOSE_LOGS); + Logger.init(); Logger.welcome(); if (process.env.NODE_ENV == "production") { Logger.info('Starting in production mode'); } else { - Logger.info('Starting in development mode'); + Logger.debug('Starting in development mode'); } await Database.setup(); @@ -21,5 +22,4 @@ module.exports.main = async function() await Discord.setup(); Logger.ready(); - }