update DiscordAuditLogChange to be less manual (#3823)

This commit is contained in:
Fleny
2024-10-06 23:37:17 -05:00
committed by GitHub
parent 92d717b83a
commit a749905740
4 changed files with 107 additions and 437 deletions
+11 -118
View File
@@ -1,133 +1,26 @@
import type { DiscordAuditLogEntry } from '@discordeno/types'
import { type AuditLogEntry, type Bot, iconHashToBigInt } from '../index.js'
import { type AuditLogEntry, type Bot } from '../index.js'
export function transformAuditLogEntry(bot: Bot, payload: DiscordAuditLogEntry): AuditLogEntry {
const auditLogEntry = {
id: bot.transformers.snowflake(payload.id),
changes: payload.changes?.map((change) => {
switch (change.key) {
case '$add':
case '$remove':
return {
key: change.key,
new: change.new_value?.map((val) => ({
id: val.id ? bot.transformers.snowflake(val.id) : undefined,
name: val.name,
})),
old: change.old_value?.map((val) => ({
id: val?.id ? bot.transformers.snowflake(val.id) : undefined,
name: val?.name,
})),
}
case 'rules_channel_id':
case 'public_updates_channel_id':
case 'owner_id':
case 'widget_channel_id':
case 'system_channel_id':
case 'application_id':
case 'permissions':
case 'allow':
case 'deny':
case 'channel_id':
case 'inviter_id':
case 'id':
return {
key: change.key,
old: change.old_value ? bot.transformers.snowflake(change.old_value) : undefined,
new: change.new_value ? bot.transformers.snowflake(change.new_value) : undefined,
}
case 'discovery_splash_hash':
case 'banner_hash':
case 'icon_hash':
case 'image_hash':
case 'splash_hash':
case 'avatar_hash':
return {
key: change.key,
old: change.old_value ? iconHashToBigInt(change.old_value) : undefined,
new: change.new_value ? iconHashToBigInt(change.new_value) : undefined,
}
case 'name':
case 'description':
case 'preferred_locale':
case 'region':
case 'afk_channel_id':
case 'vanity_url_code':
case 'topic':
case 'code':
case 'nick':
case 'location':
return {
key: change.key,
old: change.old_value,
new: change.new_value,
}
case 'afk_timeout':
case 'mfa_level':
case 'verification_level':
case 'explicit_content_filter':
case 'default_message_notifications':
case 'prune_delete_days':
case 'position':
case 'bitrate':
case 'rate_limit_per_user':
case 'color':
case 'max_uses':
case 'uses':
case 'max_age':
case 'expire_behavior':
case 'expire_grace_period':
case 'user_limit':
case 'privacy_level':
case 'entity_type':
case 'status':
return {
key: change.key,
old: change.old_value ? Number(change.old_value) : undefined,
new: change.new_value ? Number(change.new_value) : undefined,
}
case 'widget_enabled':
case 'nsfw':
case 'hoist':
case 'mentionable':
case 'temporary':
case 'deaf':
case 'mute':
case 'enable_emoticons':
return {
key: change.key,
old: change.old_value ?? false,
new: change.new_value ?? false,
}
case 'permission_overwrites':
return {
key: change.key,
old: change.old_value,
new: change.new_value,
}
default:
return {
key: change.key,
old: change.old_value,
new: change.new_value,
}
}
}),
changes: payload.changes,
userId: payload.user_id ? bot.transformers.snowflake(payload.user_id) : undefined,
targetId: payload.target_id ? bot.transformers.snowflake(payload.target_id) : undefined,
actionType: payload.action_type,
options: payload.options
? {
deleteMemberDays: payload.options.delete_member_days ? Number(payload.options.delete_member_days) : 0,
membersRemoved: payload.options.members_removed ? Number(payload.options.members_removed) : 0,
channelId: payload.options.channel_id ? bot.transformers.snowflake(payload.options.channel_id) : undefined,
messageId: payload.options.message_id ? bot.transformers.snowflake(payload.options.message_id) : undefined,
count: payload.options.count ? Number(payload.options.count) : 0,
id: payload.options.id ? bot.transformers.snowflake(payload.options.id) : undefined,
type: Number(payload.options.type),
roleName: payload.options.role_name,
applicationId: payload.options.application_id ? bot.transformers.snowflake(payload.options.application_id) : undefined,
autoModerationRuleName: payload.options.auto_moderation_rule_name,
autoModerationRuleTriggerType: payload.options.auto_moderation_rule_trigger_type,
channelId: payload.options.channel_id ? bot.transformers.snowflake(payload.options.channel_id) : undefined,
count: payload.options.count ? Number(payload.options.count) : undefined,
deleteMemberDays: payload.options.delete_member_days ? Number(payload.options.delete_member_days) : undefined,
id: payload.options.id ? bot.transformers.snowflake(payload.options.id) : undefined,
membersRemoved: payload.options.members_removed ? Number(payload.options.members_removed) : undefined,
messageId: payload.options.message_id ? bot.transformers.snowflake(payload.options.message_id) : undefined,
roleName: payload.options.role_name,
type: payload.options.type ? Number(payload.options.type) : undefined,
integrationType: payload.options.integration_type,
}
: undefined,
@@ -1,131 +1,10 @@
import type { DiscordAuditLogEntry } from '@discordeno/types'
import { type AuditLogEntry, type Bot, iconBigintToHash } from '../../index.js'
import { type AuditLogEntry, type Bot } from '../../index.js'
export function transformAuditLogEntryToDiscordAuditLogEntry(bot: Bot, payload: AuditLogEntry): DiscordAuditLogEntry {
return {
id: bot.transformers.reverse.snowflake(payload.id),
// @ts-expect-error: ts can't identify return type of switch case
changes: payload.changes?.map((change) => {
switch (change.key) {
case '$add':
case '$remove':
return {
key: change.key,
new_value: (
change.new as Array<{
id: bigint | undefined
name: string | undefined
}>
)?.map((val) => ({
id: val.id ? bot.transformers.reverse.snowflake(val.id) : undefined,
name: val.name,
})),
old_value: (
change.old as
| Array<{
id: bigint | undefined
name: string | undefined
}>
| undefined
)?.map((val) => ({
id: val?.id ? bot.transformers.reverse.snowflake(val.id) : undefined,
name: val?.name,
})),
}
case 'rules_channel_id':
case 'public_updates_channel_id':
case 'owner_id':
case 'widget_channel_id':
case 'system_channel_id':
case 'application_id':
case 'permissions':
case 'allow':
case 'deny':
case 'channel_id':
case 'inviter_id':
case 'id':
return {
key: change.key,
old_value: change.old ? bot.transformers.reverse.snowflake(change.old as bigint) : '',
new_value: change.new ? bot.transformers.reverse.snowflake(change.new as bigint) : '',
}
case 'discovery_splash_hash':
case 'banner_hash':
case 'icon_hash':
case 'image_hash':
case 'splash_hash':
case 'avatar_hash':
return {
key: change.key,
old_value: change.old ? iconBigintToHash(change.old as bigint) : '',
new_value: change.new ? iconBigintToHash(change.new as bigint) : '',
}
case 'name':
case 'description':
case 'preferred_locale':
case 'region':
case 'afk_channel_id':
case 'vanity_url_code':
case 'topic':
case 'code':
case 'nick':
case 'location':
return {
key: change.key,
old_value: change.old,
new_value: change.new,
}
case 'afk_timeout':
case 'mfa_level':
case 'verification_level':
case 'explicit_content_filter':
case 'default_message_notifications':
case 'prune_delete_days':
case 'position':
case 'bitrate':
case 'rate_limit_per_user':
case 'color':
case 'max_uses':
case 'uses':
case 'max_age':
case 'expire_behavior':
case 'expire_grace_period':
case 'user_limit':
case 'privacy_level':
case 'entity_type':
case 'status':
return {
key: change.key,
old_value: change.old ? Number(change.old) : '',
new_value: change.new ? Number(change.new) : '',
}
case 'widget_enabled':
case 'nsfw':
case 'hoist':
case 'mentionable':
case 'temporary':
case 'deaf':
case 'mute':
case 'enable_emoticons':
return {
key: change.key,
old_value: change.old,
new_value: change.new,
}
case 'permission_overwrites':
return {
key: change.key,
old_value: change.old,
new_value: change.new,
}
default:
return {
key: change.key,
old_value: change.old,
new_value: change.new,
}
}
}),
changes: payload.changes,
user_id: payload.userId ? bot.transformers.reverse.snowflake(payload.userId) : null,
target_id: payload.targetId ? bot.transformers.reverse.snowflake(payload.targetId) : null,
action_type: payload.actionType,
@@ -133,18 +12,17 @@ export function transformAuditLogEntryToDiscordAuditLogEntry(bot: Bot, payload:
options: payload.options
? {
// respect transformer as reference than type
delete_member_days: payload.options.deleteMemberDays === 0 ? payload.options.deleteMemberDays.toString() : '',
members_removed: payload.options.membersRemoved === 0 ? payload.options.membersRemoved.toString() : '',
channel_id: payload.options.channelId ? bot.transformers.reverse.snowflake(payload.options.channelId) : '',
message_id: payload.options.messageId ? bot.transformers.reverse.snowflake(payload.options.messageId) : '',
count: payload.options.count === 0 ? payload.options.count.toString() : '',
id: payload.options.id ? bot.transformers.reverse.snowflake(payload.options.id) : '',
type: payload.options.type.toString(),
role_name: payload.options.roleName,
// make up value to make ts shut up, the orginal value do not persevere in transformer
application_id: '',
application_id: payload.options.applicationId ? bot.transformers.reverse.snowflake(payload.options.applicationId) : undefined,
auto_moderation_rule_name: payload.options.autoModerationRuleName,
auto_moderation_rule_trigger_type: payload.options.autoModerationRuleTriggerType,
channel_id: payload.options.channelId ? bot.transformers.reverse.snowflake(payload.options.channelId) : undefined,
count: payload.options.count !== undefined ? payload.options.count.toString() : undefined,
delete_member_days: payload.options.deleteMemberDays !== undefined ? payload.options.deleteMemberDays.toString() : undefined,
id: payload.options.id ? bot.transformers.reverse.snowflake(payload.options.id) : undefined,
members_removed: payload.options.membersRemoved !== undefined ? payload.options.membersRemoved.toString() : undefined,
message_id: payload.options.messageId ? bot.transformers.reverse.snowflake(payload.options.messageId) : undefined,
role_name: payload.options.roleName,
type: payload.options.type !== undefined ? payload.options.type.toString() : undefined,
integration_type: payload.options.integrationType,
}
: undefined,
+12 -82
View File
@@ -15,6 +15,7 @@ import type {
DefaultMessageNotificationLevels,
DiscordActivityLocationKind,
DiscordApplicationIntegrationType,
DiscordAuditLogChange,
DiscordAutoModerationRuleTriggerMetadataPresets,
DiscordEntitlementType,
DiscordGuildOnboardingMode,
@@ -288,96 +289,25 @@ export interface AuditLogEntry {
id: bigint
userId?: bigint
reason?: string
changes?: AuditLogChange[]
changes?: DiscordAuditLogChange[]
targetId?: bigint
actionType: AuditLogEvents
options?: OptionalAuditEntryInfo
}
export interface AuditLogChange {
new?: string | number | bigint | boolean | DiscordOverwrite[] | Partial<Role>[]
old?: string | number | bigint | boolean | DiscordOverwrite[] | Partial<Role>[]
key:
| 'id'
| 'name'
| 'description'
| 'type'
| 'permissions'
| 'locked'
| 'invitable'
| 'nsfw'
| 'archived'
| 'position'
| 'topic'
| 'bitrate'
| 'default_auto_archive_duration'
| 'auto_archive_duration'
| 'allow'
| 'deny'
| 'channel_id'
| 'deaf'
| 'mute'
| 'status'
| 'nick'
| 'communication_disabled_until'
| 'color'
| 'permission_overwrites'
| 'user_limit'
| 'rate_limit_per_user'
| 'owner_id'
| 'application_id'
| 'hoist'
| 'mentionable'
| 'location'
| 'verification_level'
| 'default_message_notifications'
| 'explicit_content_filter'
| 'preferred_locale'
| 'afk_timeout'
| 'afk_channel_id'
| 'system_channel_id'
| 'widget_enabled'
| 'mfa_level'
| 'vanity_url_code'
| 'icon_hash'
| 'widget_channel_id'
| 'rules_channel_id'
| 'public_updates_channel_id'
| 'code'
| 'region'
| 'privacy_level'
| 'entity_type'
| 'enable_emoticons'
| 'expire_behavior'
| 'expire_grace_period'
| 'uses'
| 'max_uses'
| 'max_age'
| 'temporary'
| 'discovery_splash_hash'
| 'banner_hash'
| 'image_hash'
| 'splash_hash'
| 'inviter_id'
| 'avatar_hash'
| 'command_id'
| 'prune_delete_days'
| '$add'
| '$remove'
}
export interface OptionalAuditEntryInfo {
id?: bigint
applicationId?: bigint
autoModerationRuleName?: string
autoModerationRuleTriggerType?: string
channelId?: bigint
count?: number
deleteMemberDays?: number
id?: bigint
membersRemoved?: number
messageId?: bigint
type: number
count: number
deleteMemberDays: number
membersRemoved: number
roleName: string
autoModerationRuleName: string
autoModerationRuleTriggerType: string
integrationType: string
roleName?: string
type?: number
integrationType?: string
}
export interface AutoModerationActionExecution {