From e0886858957e7d23fa6fbdc8505039eeb87fa9c7 Mon Sep 17 00:00:00 2001 From: Benjamin Kyd Date: Wed, 22 Jul 2020 20:40:09 +0100 Subject: [PATCH] Role Channel Overwrite Add/Remove --- src/discordevents.js | 64 +++++++++++++++++++++++++++++++++++++++++-- src/discordhelpers.js | 1 + 2 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/discordevents.js b/src/discordevents.js index 35079f8..41628c5 100644 --- a/src/discordevents.js +++ b/src/discordevents.js @@ -253,11 +253,71 @@ async function ChannelUpdate(channel, oldchannel) if (channel.permissionOverwrites != oldchannel.permissionOverwrites) { - channel.permissionOverwrites.forEach(e => console.log(e)); - const oldperm = oldchannel.permissionOverwrites; const newperm = channel.permissionOverwrites; + delete oldperm.baseObject; + delete newperm.baseObject + delete oldperm.limit + delete newperm.limit + + // oldperm and newperms are collections which + // extend map which is a pretty generic unordered + // map (in js basically an array lmao) + + + + // Role overwrite added + for (perm of newperm) + { + const RoleID = perm[0]; + // role overwrite already exists + if (oldperm.get(RoleID)) continue; + const Role = DiscordHelpers.GetGuildRole(channel.guild, RoleID); + + let embed = new DiscordEmbed({ + title: 'Channel Overwrite Created', + fields: [ + { name: 'Channel', value: channel.mention, inline: true }, + { name: 'Role Overwrite', value: Role.name, inline: true }, + ], + timestamp: new Date(), + footer: { text: `ID: ${channel.id}` } + }); + + embed.colour('#42A832'); + embed.url('https://logori.xyz'); + Discord.bot.createMessage(FallbackChannel, {embed: embed.sendable}); + return; + } + // Role overwrite removed + for (perm of oldperm) + { + const RoleID = perm[0]; + // role overwrite already exists + if (newperm.get(RoleID)) continue; + const Role = DiscordHelpers.GetGuildRole(channel.guild, RoleID); + + let embed = new DiscordEmbed({ + title: 'Channel Overwrite Removed', + fields: [ + { name: 'Channel', value: channel.mention, inline: true }, + { name: 'Role Overwrite', value: Role.name, inline: true }, + ], + timestamp: new Date(), + footer: { text: `ID: ${channel.id}` } + }); + + embed.colour('#E0532B'); + embed.url('https://logori.xyz'); + Discord.bot.createMessage(FallbackChannel, {embed: embed.sendable}); + return; + } + + // find the overwrites that have changed, there is no chance of a new overwrite + // or a deleted one, a diff must be constructed + // TODO : make an ambigous role overwrite diff + } diff --git a/src/discordhelpers.js b/src/discordhelpers.js index ede3470..cca1ed5 100644 --- a/src/discordhelpers.js +++ b/src/discordhelpers.js @@ -1,3 +1,4 @@ module.exports.IsUserAdmin = (member) => member.permission.has('administrator') || member.id == process.env.BOT_OWNER; module.exports.GetGuildCatatory = (guild, catid) => guild.channels.find(c => c.id == catid); +module.exports.GetGuildRole = (guild, roleid) => guild.roles.find(c => c.id == roleid);