feat: backport automod (#8886)

Co-authored-by: Aura Román <kyradiscord@gmail.com>
This commit is contained in:
Jaworek
2023-01-13 11:26:32 +01:00
committed by GitHub
parent cf3c7a7c54
commit 428798374f
22 changed files with 1201 additions and 8 deletions

24
typings/enums.d.ts vendored
View File

@@ -35,6 +35,29 @@ export const enum ApplicationCommandPermissionTypes {
USER = 2,
}
export const enum AutoModerationRuleTriggerTypes {
KEYWORD = 1,
SPAM = 2,
KEYWORD_PRESET = 3,
MENTION_SPAM = 4,
}
export const enum AutoModerationRuleKeywordPresetTypes {
PROFANITY = 1,
SEXUAL_CONTENT = 2,
SLURS = 3,
}
export const enum AutoModerationActionTypes {
BLOCK_MESSAGE = 1,
SEND_ALERT_MESSAGE = 2,
TIMEOUT = 3,
}
export const enum AutoModerationRuleEventTypes {
MESSAGE_SEND = 1,
}
export const enum ChannelTypes {
GUILD_TEXT = 0,
DM = 1,
@@ -87,6 +110,7 @@ export const enum MessageTypes {
THREAD_STARTER_MESSAGE,
GUILD_INVITE_REMINDER,
CONTEXT_MENU_COMMAND,
AUTO_MODERATION_ACTION,
}
export const enum DefaultMessageNotificationLevels {

190
typings/index.d.ts vendored
View File

@@ -65,6 +65,10 @@ import {
ApplicationCommandOptionTypes,
ApplicationCommandPermissionTypes,
ApplicationCommandTypes,
AutoModerationActionTypes,
AutoModerationRuleEventTypes,
AutoModerationRuleKeywordPresetTypes,
AutoModerationRuleTriggerTypes,
ChannelTypes,
DefaultMessageNotificationLevels,
ExplicitContentFilterLevels,
@@ -94,6 +98,8 @@ import {
ForumLayoutType,
} from './enums';
import {
APIAutoModerationRule,
GatewayAutoModerationActionExecutionDispatchData,
RawActivityData,
RawAnonymousGuildData,
RawApplicationCommandData,
@@ -284,6 +290,8 @@ export class ApplicationCommand<PermissionsFetchType = {}> extends Base {
export type ApplicationResolvable = Application | Activity | Snowflake;
export type AutoModerationRuleResolvable = AutoModerationRule | Snowflake;
export class ApplicationFlags extends BitField<ApplicationFlagsString> {
public static FLAGS: Record<ApplicationFlagsString, number>;
public static resolve(bit?: BitFieldResolvable<ApplicationFlagsString, number>): number;
@@ -948,6 +956,7 @@ export class Guild extends AnonymousGuild {
public maxVideoChannelUsers: number | null;
public approximateMemberCount: number | null;
public approximatePresenceCount: number | null;
public autoModerationRules: AutoModerationRuleManager;
public available: boolean;
public bans: GuildBanManager;
public channels: GuildChannelManager;
@@ -1051,6 +1060,7 @@ export class GuildAuditLogs<T extends GuildAuditLogsResolvable = 'ALL'> {
private constructor(guild: Guild, data: RawGuildAuditLogData);
private webhooks: Collection<Snowflake, Webhook>;
private integrations: Collection<Snowflake | string, Integration>;
private autoModerationRules: Collection<Snowflake, AutoModerationRule>;
public entries: Collection<Snowflake, GuildAuditLogsEntry<T>>;
@@ -3111,7 +3121,11 @@ export const Constants: {
DefaultMessageNotificationLevels: EnumHolder<typeof DefaultMessageNotificationLevels>;
VerificationLevels: EnumHolder<typeof VerificationLevels>;
MembershipStates: EnumHolder<typeof MembershipStates>;
ApplicationCommandOptionTypes: EnumHolder<typeof ApplicationCommandOptionTypes>;
AutoModerationRuleTriggerTypes: EnumHolder<typeof AutoModerationRuleTriggerTypes>;
AutoModerationRuleKeywordPresetTypes: EnumHolder<typeof AutoModerationRuleKeywordPresetTypes>;
AutoModerationActionTypes: EnumHolder<typeof AutoModerationActionTypes>;
AutoModerationRuleEventTypes: EnumHolder<typeof AutoModerationRuleEventTypes>;
ApplicationCommandPermissionTypes: EnumHolder<typeof ApplicationCommandPermissionTypes>;
InteractionTypes: EnumHolder<typeof InteractionTypes>;
InteractionResponseTypes: EnumHolder<typeof InteractionResponseTypes>;
@@ -4080,6 +4094,84 @@ export type ApplicationCommandType = keyof typeof ApplicationCommandTypes;
export type ApplicationCommandOptionType = keyof typeof ApplicationCommandOptionTypes;
export type AutoModerationRuleTriggerType = keyof typeof AutoModerationRuleTriggerTypes;
export type AutoModerationRuleKeywordPresetType = keyof typeof AutoModerationRuleKeywordPresetTypes;
export type AutoModerationActionType = keyof typeof AutoModerationActionTypes;
export type AutoModerationRuleEventType = keyof typeof AutoModerationRuleEventTypes;
export class AutoModerationActionExecution {
private constructor(data: GatewayAutoModerationActionExecutionDispatchData, guild: Guild);
public guild: Guild;
public action: AutoModerationAction;
public ruleId: Snowflake;
public ruleTriggerType: AutoModerationRuleTriggerType;
public userId: Snowflake;
public channelId: Snowflake | null;
public messageId: Snowflake | null;
public alertSystemMessageId: Snowflake | null;
public content: string;
public matchedKeyword: string | null;
public matchedContent: string | null;
public get autoModerationRule(): AutoModerationRule | null;
}
export class AutoModerationRule extends Base {
private constructor(client: Client<true>, data: APIAutoModerationRule, guild: Guild);
public id: Snowflake;
public guild: Guild;
public name: string;
public creatorId: Snowflake;
public eventType: AutoModerationRuleEventType;
public triggerType: AutoModerationRuleTriggerType;
public triggerMetadata: AutoModerationTriggerMetadata;
public actions: AutoModerationAction[];
public enabled: boolean;
public exemptRoles: Collection<Snowflake, Role>;
public exemptChannels: Collection<Snowflake, GuildBasedChannel>;
public edit(options: AutoModerationRuleEditOptions): Promise<AutoModerationRule>;
public delete(reason?: string): Promise<void>;
public setName(name: string, reason?: string): Promise<AutoModerationRule>;
public setEventType(
eventType: AutoModerationRuleEventType | AutoModerationRuleEventTypes,
reason?: string,
): Promise<AutoModerationRule>;
public setKeywordFilter(keywordFilter: string[], reason?: string): Promise<AutoModerationRule>;
public setRegexPatterns(regexPatterns: string[], reason?: string): Promise<AutoModerationRule>;
public setPresets(presets: AutoModerationRuleKeywordPresetType[], reason?: string): Promise<AutoModerationRule>;
public setAllowList(allowList: string[], reason?: string): Promise<AutoModerationRule>;
public setMentionTotalLimit(mentionTotalLimit: number, reason?: string): Promise<AutoModerationRule>;
public setActions(actions: AutoModerationActionOptions[], reason?: string): Promise<AutoModerationRule>;
public setEnabled(enabled?: boolean, reason?: string): Promise<AutoModerationRule>;
public setExemptRoles(
roles: Collection<Snowflake, Role> | RoleResolvable[],
reason?: string,
): Promise<AutoModerationRule>;
public setExemptChannels(
channels: Collection<Snowflake, GuildBasedChannel> | GuildChannelResolvable[],
reason?: string,
): Promise<AutoModerationRule>;
}
export class AutoModerationRuleManager extends CachedManager<
Snowflake,
AutoModerationRule,
AutoModerationRuleResolvable
> {
private constructor(guild: Guild, iterable: unknown);
public guild: Guild;
public create(options: AutoModerationRuleCreateOptions): Promise<AutoModerationRule>;
public edit(
autoModerationRule: AutoModerationRuleResolvable,
options: AutoModerationRuleEditOptions,
): Promise<AutoModerationRule>;
public fetch(options: AutoModerationRuleResolvable | FetchAutoModerationRuleOptions): Promise<AutoModerationRule>;
public fetch(options?: FetchAutoModerationRulesOptions): Promise<Collection<Snowflake, AutoModerationRule>>;
public delete(autoModerationRule: AutoModerationRuleResolvable, reason?: string): Promise<void>;
}
export interface ApplicationCommandPermissionData {
id: Snowflake;
type: ApplicationCommandPermissionType | ApplicationCommandPermissionTypes;
@@ -4104,6 +4196,57 @@ export type ApplicationFlagsString =
| 'GATEWAY_MESSAGE_CONTENT'
| 'GATEWAY_MESSAGE_CONTENT_LIMITED';
export interface AutoModerationAction {
type: AutoModerationActionType | AutoModerationActionTypes;
metadata: AutoModerationActionMetadata;
}
export interface AutoModerationActionMetadata {
channelId: Snowflake | null;
durationSeconds: number | null;
}
export interface AutoModerationTriggerMetadata {
keywordFilter: string[];
regexPatterns: string[];
presets: (AutoModerationRuleKeywordPresetType | AutoModerationRuleKeywordPresetTypes)[];
allowList: string[];
mentionTotalLimit: number | null;
}
export interface FetchAutoModerationRuleOptions extends BaseFetchOptions {
autoModerationRule: AutoModerationRuleResolvable;
}
export interface FetchAutoModerationRulesOptions {
cache?: boolean;
}
export interface AutoModerationRuleCreateOptions {
name: string;
eventType: AutoModerationRuleEventType | AutoModerationRuleEventTypes;
triggerType: AutoModerationRuleTriggerType | AutoModerationRuleTriggerTypes;
triggerMetadata?: AutoModerationTriggerMetadataOptions;
actions: AutoModerationActionOptions[];
enabled?: boolean;
exemptRoles?: Collection<Snowflake, Role> | RoleResolvable[];
exemptChannels?: Collection<Snowflake, GuildBasedChannel> | GuildChannelResolvable[];
reason?: string;
}
export interface AutoModerationRuleEditOptions extends Partial<Omit<AutoModerationRuleCreateOptions, 'triggerType'>> {}
export interface AutoModerationTriggerMetadataOptions extends Partial<AutoModerationTriggerMetadata> {}
export interface AutoModerationActionOptions {
type: AutoModerationActionType | AutoModerationActionTypes;
metadata?: AutoModerationActionMetadataOptions;
}
export interface AutoModerationActionMetadataOptions extends Partial<Omit<AutoModerationActionMetadata, 'channelId'>> {
channel: GuildTextChannelResolvable | ThreadChannel;
}
export interface AuditLogChange {
key: APIAuditLogChange['key'];
old?: APIAuditLogChange['old_value'];
@@ -4163,6 +4306,7 @@ export type BufferResolvable = Buffer | string;
export interface Caches {
ApplicationCommandManager: [manager: typeof ApplicationCommandManager, holds: typeof ApplicationCommand];
AutoModerationRuleManager: [manager: typeof AutoModerationRuleManager, holds: typeof AutoModerationRule];
BaseGuildEmojiManager: [manager: typeof BaseGuildEmojiManager, holds: typeof GuildEmoji];
GuildEmojiManager: [manager: typeof GuildEmojiManager, holds: typeof GuildEmoji];
// TODO: ChannelManager: [manager: typeof ChannelManager, holds: typeof Channel];
@@ -4297,6 +4441,13 @@ export interface ClientEvents extends BaseClientEvents {
applicationCommandDelete: [command: ApplicationCommand];
/** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */
applicationCommandUpdate: [oldCommand: ApplicationCommand | null, newCommand: ApplicationCommand];
autoModerationActionExecution: [autoModerationActionExecution: AutoModerationActionExecution];
autoModerationRuleCreate: [autoModerationRule: AutoModerationRule];
autoModerationRuleDelete: [autoModerationRule: AutoModerationRule];
autoModerationRuleUpdate: [
oldAutoModerationRule: AutoModerationRule | null,
newAutoModerationRule: AutoModerationRule,
];
cacheSweep: [message: string];
channelCreate: [channel: NonThreadGuildBasedChannel];
channelDelete: [channel: DMChannel | NonThreadGuildBasedChannel];
@@ -4570,6 +4721,10 @@ export interface ConstantsEvents {
APPLICATION_COMMAND_DELETE: 'applicationCommandDelete';
/** @deprecated See [this issue](https://github.com/discord/discord-api-docs/issues/3690) for more information. */
APPLICATION_COMMAND_UPDATE: 'applicationCommandUpdate';
AUTO_MODERATION_ACTION_EXECUTION: 'autoModerationActionExecution';
AUTO_MODERATION_RULE_CREATE: 'autoModerationRuleCreate';
AUTO_MODERATION_RULE_DELETE: 'autoModerationRuleDelete';
AUTO_MODERATION_RULE_UPDATE: 'autoModerationRuleUpdate';
GUILD_CREATE: 'guildCreate';
GUILD_DELETE: 'guildDelete';
GUILD_UPDATE: 'guildUpdate';
@@ -4926,6 +5081,12 @@ interface GuildAuditLogsTypes {
THREAD_CREATE: ['THREAD', 'CREATE'];
THREAD_UPDATE: ['THREAD', 'UPDATE'];
THREAD_DELETE: ['THREAD', 'DELETE'];
AUTO_MODERATION_RULE_CREATE: ['AUTO_MODERATION', 'CREATE'];
AUTO_MODERATION_RULE_UPDATE: ['AUTO_MODERATION', 'UPDATE'];
AUTO_MODERATION_RULE_DELETE: ['AUTO_MODERATION', 'DELETE'];
AUTO_MODERATION_BLOCK_MESSAGE: ['AUTO_MODERATION', 'CREATE'];
AUTO_MODERATION_FLAG_TO_CHANNEL: ['AUTO_MODERATION', 'CREATE'];
AUTO_MODERATION_USER_COMMUNICATION_DISABLED: ['AUTO_MODERATION', 'CREATE'];
}
export interface GuildAuditLogsIds {
@@ -4976,6 +5137,12 @@ export interface GuildAuditLogsIds {
110: 'THREAD_CREATE';
111: 'THREAD_UPDATE';
112: 'THREAD_DELETE';
140: 'AUTO_MODERATION_RULE_CREATE';
141: 'AUTO_MODERATION_RULE_UPDATE';
142: 'AUTO_MODERATION_RULE_DELETE';
143: 'AUTO_MODERATION_BLOCK_MESSAGE';
144: 'AUTO_MODERATION_FLAG_TO_CHANNEL';
145: 'AUTO_MODERATION_USER_COMMUNICATION_DISABLED';
}
export type GuildAuditLogsActions = { [Key in keyof GuildAuditLogsIds as GuildAuditLogsIds[Key]]: Key } & { ALL: null };
@@ -5010,6 +5177,18 @@ export interface GuildAuditLogsEntryExtraField {
STAGE_INSTANCE_CREATE: StageChannel | { id: Snowflake };
STAGE_INSTANCE_DELETE: StageChannel | { id: Snowflake };
STAGE_INSTANCE_UPDATE: StageChannel | { id: Snowflake };
AUTO_MODERATION_BLOCK_MESSAGE: {
autoModerationRuleName: string;
autoModerationRuleTriggerType: AutoModerationRuleTriggerType;
};
AUTO_MODERATION_FLAG_TO_CHANNEL: {
autoModerationRuleName: string;
autoModerationRuleTriggerType: AutoModerationRuleTriggerType;
};
AUTO_MODERATION_USER_COMMUNICATIONDISABLED: {
autoModerationRuleName: string;
autoModerationRuleTriggerType: AutoModerationRuleTriggerType;
};
}
export interface GuildAuditLogsEntryTargetField<TActionType extends GuildAuditLogsActionType> {
@@ -5024,6 +5203,7 @@ export interface GuildAuditLogsEntryTargetField<TActionType extends GuildAuditLo
STAGE_INSTANCE: StageInstance;
STICKER: Sticker;
GUILD_SCHEDULED_EVENT: GuildScheduledEvent;
AUTO_MODERATION: AutoModerationRule;
}
export interface GuildAuditLogsFetchOptions<T extends GuildAuditLogsResolvable> {
@@ -5151,7 +5331,8 @@ export type GuildFeatures =
| 'THREE_DAY_THREAD_ARCHIVE'
| 'SEVEN_DAY_THREAD_ARCHIVE'
| 'PRIVATE_THREADS'
| 'ROLE_ICONS';
| 'ROLE_ICONS'
| 'AUTO_MODERATION';
export interface GuildMemberEditData {
nick?: string | null;
@@ -5338,7 +5519,9 @@ export type IntentsString =
| 'DIRECT_MESSAGE_REACTIONS'
| 'DIRECT_MESSAGE_TYPING'
| 'MESSAGE_CONTENT'
| 'GUILD_SCHEDULED_EVENTS';
| 'GUILD_SCHEDULED_EVENTS'
| 'AUTO_MODERATION_CONFIGURATION'
| 'AUTO_MODERATION_EXECUTION';
export interface InviteGenerationOptions {
permissions?: PermissionResolvable;
@@ -6005,6 +6188,7 @@ export interface LifetimeSweepOptions {
export interface SweeperDefinitions {
applicationCommands: [Snowflake, ApplicationCommand];
autoModerationRules: [Snowflake, AutoModerationRule];
bans: [Snowflake, GuildBan];
emojis: [Snowflake, GuildEmoji];
invites: [string, Invite, true];

View File

@@ -82,7 +82,14 @@ import {
APIModalSubmitInteraction,
} from 'discord-api-types/v9';
import { GuildChannel, Guild, PermissionOverwrites, InteractionType } from '.';
import type { InteractionTypes, MessageComponentTypes } from './enums';
import type {
AutoModerationActionTypes,
AutoModerationRuleEventTypes,
AutoModerationRuleKeywordPresetTypes,
AutoModerationRuleTriggerTypes,
InteractionTypes,
MessageComponentTypes,
} from './enums';
export type RawActivityData = GatewayActivity;
@@ -216,3 +223,48 @@ export type RawWelcomeScreenData = APIGuildWelcomeScreen;
export type RawWidgetData = APIGuildWidget;
export type RawWidgetMemberData = APIGuildWidgetMember;
export interface GatewayAutoModerationActionExecutionDispatchData {
guild_id: Snowflake;
action: APIAutoModerationAction;
rule_id: Snowflake;
rule_trigger_type: AutoModerationRuleTriggerTypes;
user_id: Snowflake;
channel_id?: Snowflake;
message_id?: Snowflake;
alert_system_message_id?: Snowflake;
content: string;
matched_keyword: string | null;
matched_content: string | null;
}
export interface APIAutoModerationAction {
type: AutoModerationActionTypes;
metadata?: APIAutoModerationActionMetadata;
}
export interface APIAutoModerationActionMetadata {
channel_id?: Snowflake;
duration_seconds?: number;
}
export interface APIAutoModerationRule {
id: Snowflake;
guild_id: Snowflake;
name: string;
creator_id: Snowflake;
event_type: AutoModerationRuleEventTypes;
trigger_type: AutoModerationRuleTriggerTypes;
trigger_metadata: APIAutoModerationRuleTriggerMetadata;
actions: APIAutoModerationAction[];
enabled: boolean;
exempt_roles: Snowflake[];
exempt_channels: Snowflake[];
}
export interface APIAutoModerationRuleTriggerMetadata {
keyword_filter?: string[];
presets?: AutoModerationRuleKeywordPresetTypes[];
allow_list?: string[];
regex_patterns?: string[];
mention_total_limit?: number;
}