mirror of
https://github.com/ahmadk953/poixpixel-discord-bot.git
synced 2025-05-11 19:23:06 +00:00
Improved channelUpdate event logging
This commit is contained in:
parent
6c523bbeba
commit
3762e554b4
5 changed files with 295 additions and 16 deletions
|
@ -1,7 +1,98 @@
|
|||
import { AuditLogEvent, Events, GuildChannel } from 'discord.js';
|
||||
import {
|
||||
AuditLogEvent,
|
||||
Events,
|
||||
GuildChannel,
|
||||
PermissionOverwrites,
|
||||
} from 'discord.js';
|
||||
|
||||
import logAction from '../util/logging/logAction.js';
|
||||
import { ChannelLogAction } from '../util/logging/types.js';
|
||||
import { Event } from '../types/EventTypes.js';
|
||||
|
||||
function arePermissionsEqual(
|
||||
oldPerms: Map<string, PermissionOverwrites>,
|
||||
newPerms: Map<string, PermissionOverwrites>,
|
||||
): boolean {
|
||||
if (oldPerms.size !== newPerms.size) return false;
|
||||
|
||||
for (const [id, oldPerm] of oldPerms.entries()) {
|
||||
const newPerm = newPerms.get(id);
|
||||
if (!newPerm) return false;
|
||||
|
||||
if (
|
||||
!oldPerm.allow.equals(newPerm.allow) ||
|
||||
!oldPerm.deny.equals(newPerm.deny)
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
function getPermissionChanges(
|
||||
oldChannel: GuildChannel,
|
||||
newChannel: GuildChannel,
|
||||
): ChannelLogAction['permissionChanges'] {
|
||||
const changes: ChannelLogAction['permissionChanges'] = [];
|
||||
const newPerms = newChannel.permissionOverwrites.cache;
|
||||
const oldPerms = oldChannel.permissionOverwrites.cache;
|
||||
|
||||
for (const [id, newPerm] of newPerms.entries()) {
|
||||
const oldPerm = oldPerms.get(id);
|
||||
const targetType = newPerm.type === 0 ? 'role' : 'member';
|
||||
const targetName =
|
||||
newPerm.type === 0
|
||||
? newChannel.guild.roles.cache.get(id)?.name || id
|
||||
: newChannel.guild.members.cache.get(id)?.user.username || id;
|
||||
|
||||
if (!oldPerm) {
|
||||
changes.push({
|
||||
action: 'added',
|
||||
targetId: id,
|
||||
targetType,
|
||||
targetName,
|
||||
allow: newPerm.allow,
|
||||
deny: newPerm.deny,
|
||||
});
|
||||
} else if (
|
||||
!oldPerm.allow.equals(newPerm.allow) ||
|
||||
!oldPerm.deny.equals(newPerm.deny)
|
||||
) {
|
||||
changes.push({
|
||||
action: 'modified',
|
||||
targetId: id,
|
||||
targetType,
|
||||
targetName,
|
||||
oldAllow: oldPerm.allow,
|
||||
oldDeny: oldPerm.deny,
|
||||
newAllow: newPerm.allow,
|
||||
newDeny: newPerm.deny,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
for (const [id, oldPerm] of oldPerms.entries()) {
|
||||
if (!newPerms.has(id)) {
|
||||
const targetType = oldPerm.type === 0 ? 'role' : 'member';
|
||||
const targetName =
|
||||
oldPerm.type === 0
|
||||
? oldChannel.guild.roles.cache.get(id)?.name || id
|
||||
: oldChannel.guild.members.cache.get(id)?.user.username || id;
|
||||
|
||||
changes.push({
|
||||
action: 'removed',
|
||||
targetId: id,
|
||||
targetType,
|
||||
targetName,
|
||||
allow: oldPerm.allow,
|
||||
deny: oldPerm.deny,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
return changes;
|
||||
}
|
||||
|
||||
export const channelCreate = {
|
||||
name: Events.ChannelCreate,
|
||||
execute: async (channel: GuildChannel) => {
|
||||
|
@ -58,16 +149,33 @@ export const channelUpdate = {
|
|||
name: Events.ChannelUpdate,
|
||||
execute: async (oldChannel: GuildChannel, newChannel: GuildChannel) => {
|
||||
try {
|
||||
if (
|
||||
oldChannel.name === newChannel.name &&
|
||||
oldChannel.type === newChannel.type &&
|
||||
oldChannel.permissionOverwrites.cache.size ===
|
||||
newChannel.permissionOverwrites.cache.size &&
|
||||
arePermissionsEqual(
|
||||
oldChannel.permissionOverwrites.cache,
|
||||
newChannel.permissionOverwrites.cache,
|
||||
) &&
|
||||
oldChannel.position !== newChannel.position
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { guild } = newChannel;
|
||||
const auditLogs = await guild.fetchAuditLogs({
|
||||
type: AuditLogEvent.ChannelUpdate,
|
||||
limit: 1,
|
||||
});
|
||||
const executor = auditLogs.entries.first()?.executor;
|
||||
const log = auditLogs.entries.first();
|
||||
const executor = log?.executor;
|
||||
const moderator = executor
|
||||
? await guild.members.fetch(executor.id)
|
||||
: undefined;
|
||||
|
||||
const permissionChanges = getPermissionChanges(oldChannel, newChannel);
|
||||
|
||||
await logAction({
|
||||
guild,
|
||||
action: 'channelUpdate',
|
||||
|
@ -75,8 +183,8 @@ export const channelUpdate = {
|
|||
moderator,
|
||||
oldName: oldChannel.name,
|
||||
newName: newChannel.name,
|
||||
oldPermissions: oldChannel.permissionOverwrites.cache.first()?.allow,
|
||||
newPermissions: newChannel.permissionOverwrites.cache.first()?.allow,
|
||||
permissionChanges:
|
||||
(permissionChanges ?? []).length > 0 ? permissionChanges : undefined,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Error handling channel update:', error);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue