/*
Spacebar: A FOSS re-implementation and extension of the Discord.com backend.
Copyright (C) 2025 Spacebar and Spacebar Contributors
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { Snowflake } from "../../Identifiers";
export type AutomodRuleTriggerMetadata = AutomodMentionSpamRule | AutomodSuspectedSpamRule | AutomodCommonlyFlaggedWordsRule | AutomodCustomWordsRule;
export class AutomodMentionSpamRule {
mention_total_limit: number;
mention_raid_protection_enabled: boolean;
}
export class AutomodSuspectedSpamRule {}
export class AutomodCommonlyFlaggedWordsRule {
allow_list: string[];
presets: AutomodKeywordPresetType[];
}
export class AutomodCustomWordsRule {
allow_list: string[];
keyword_filter: string[];
regex_patterns: string[];
}
export enum AutomodRuleEventType {
MESSAGE_SEND = 1,
GUILD_MEMBER_EVENT = 2,
}
export enum AutomodRuleTriggerType {
KEYWORD = 1,
HARMFUL_LINK = 2,
SPAM = 3,
KEYWORD_PRESET = 4,
MENTION_SPAM = 5,
USER_PROFILE = 6,
GUILD_POLICY = 7,
}
export enum AutomodKeywordPresetType {
PROFANITY = 1,
SEXUAL_CONTENT = 2,
SLURS = 3,
}
export enum AutomodRuleActionType {
BLOCK_MESSAGE = 1,
SEND_ALERT_MESSAGE = 2,
TIMEOUT_USER = 3,
QUARANTINE_USER = 4,
}
export type AutomodAction =
| {
type: AutomodRuleActionType.BLOCK_MESSAGE;
metadata: {
custom_message?: string;
};
}
| {
type: AutomodRuleActionType.SEND_ALERT_MESSAGE;
metadata: {
channel_id: Snowflake;
};
}
| {
type: AutomodRuleActionType.TIMEOUT_USER;
metadata: {
duration_seconds: number;
};
}
| {
type: AutomodRuleActionType.QUARANTINE_USER;
metadata: {
duration_seconds: number;
};
};
// TODO
// eslint-disable-next-line
export interface AutomodRuleActionMetadata {}