mirror of
https://github.com/discordeno/discordeno.git
synced 2026-06-02 17:00:08 +00:00
fix: automode rule helpers and test
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
import { routes } from '@discordeno/constant'
|
||||
import TRANSFORMERS from '@discordeno/transformer'
|
||||
import type {
|
||||
AutoModerationActionType,
|
||||
AutoModerationEventTypes,
|
||||
AutoModerationTriggerTypes,
|
||||
BigString,
|
||||
Camelize,
|
||||
DiscordAutoModerationRule,
|
||||
DiscordAutoModerationRuleTriggerMetadataPresets,
|
||||
DiscordCreateAutomoderationRule,
|
||||
WithReason
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../../../restManager.js'
|
||||
import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
|
||||
/**
|
||||
* Creates an automod rule in a guild.
|
||||
@@ -18,7 +19,7 @@ import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
* @param rest - The rest manager to use to make the request.
|
||||
* @param guildId - The ID of the guild to create the rule in.
|
||||
* @param options - The parameters for the creation of the rule.
|
||||
* @returns An instance of the created {@link AutoModerationRule}.
|
||||
* @returns An instance of the created {@link DiscordAutoModerationRule}.
|
||||
*
|
||||
* @remarks
|
||||
* Requires the `MANAGE_GUILD` permission.
|
||||
@@ -31,9 +32,8 @@ export async function createAutomodRule (
|
||||
rest: RestManager,
|
||||
guildId: BigString,
|
||||
options: CreateAutoModerationRuleOptions
|
||||
): Promise<AutoModerationRule> {
|
||||
): Promise<Camelize<DiscordAutoModerationRule>> {
|
||||
const result = await rest.runMethod<DiscordAutoModerationRule>(
|
||||
|
||||
'POST',
|
||||
routes.AUTOMOD_RULES(guildId),
|
||||
{
|
||||
@@ -62,7 +62,7 @@ export async function createAutomodRule (
|
||||
} as DiscordCreateAutomoderationRule
|
||||
)
|
||||
|
||||
return rest.transformers.automodRule(rest, result)
|
||||
return TRANSFORMERS.automodRule(result)
|
||||
}
|
||||
|
||||
export interface CreateAutoModerationRuleOptions extends WithReason {
|
||||
|
||||
@@ -23,7 +23,6 @@ export async function deleteAutomodRule (
|
||||
reason?: string
|
||||
): Promise<void> {
|
||||
return await rest.runMethod<void>(
|
||||
|
||||
'DELETE',
|
||||
routes.AUTOMOD_RULE(guildId, ruleId),
|
||||
{ reason }
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
import { routes } from '@discordeno/constant'
|
||||
import TRANSFORMERS from '@discordeno/transformer'
|
||||
import type {
|
||||
AutoModerationActionType,
|
||||
AutoModerationEventTypes,
|
||||
BigString,
|
||||
Camelize,
|
||||
DiscordAutoModerationRule,
|
||||
DiscordAutoModerationRuleTriggerMetadataPresets,
|
||||
DiscordModifyAutomoderationRule,
|
||||
WithReason
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../../../restManager.js'
|
||||
import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
|
||||
/**
|
||||
* Edits an automod rule.
|
||||
@@ -18,7 +19,7 @@ import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
* @param guildId - The ID of the guild to edit the rule in.
|
||||
* @param ruleId - The ID of the rule to edit.
|
||||
* @param options - The parameters for the edit of the rule.
|
||||
* @returns An instance of the edited {@link AutoModerationRule}.
|
||||
* @returns An instance of the edited {@link DiscordAutoModerationRule}.
|
||||
*
|
||||
* @remarks
|
||||
* Requires the `MANAGE_GUILD` permission.
|
||||
@@ -32,9 +33,8 @@ export async function editAutomodRule (
|
||||
guildId: BigString,
|
||||
ruleId: BigString,
|
||||
options: Partial<EditAutoModerationRuleOptions>
|
||||
): Promise<AutoModerationRule> {
|
||||
): Promise<Camelize<DiscordAutoModerationRule>> {
|
||||
const result = await rest.runMethod<DiscordAutoModerationRule>(
|
||||
|
||||
'PATCH',
|
||||
routes.AUTOMOD_RULE(guildId, ruleId),
|
||||
{
|
||||
@@ -62,7 +62,7 @@ export async function editAutomodRule (
|
||||
} as DiscordModifyAutomoderationRule
|
||||
)
|
||||
|
||||
return rest.transformers.automodRule(rest, result)
|
||||
return TRANSFORMERS.automodRule(result)
|
||||
}
|
||||
|
||||
export interface EditAutoModerationRuleOptions extends WithReason {
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
import { routes } from '@discordeno/constant'
|
||||
import type { BigString, DiscordAutoModerationRule } from '@discordeno/types'
|
||||
import TRANSFORMERS from '@discordeno/transformer'
|
||||
import type {
|
||||
BigString,
|
||||
Camelize,
|
||||
DiscordAutoModerationRule
|
||||
} from '@discordeno/types'
|
||||
import type { RestManager } from '../../../restManager.js'
|
||||
import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
|
||||
/**
|
||||
* Gets an automod rule by its ID.
|
||||
@@ -9,7 +13,7 @@ import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
* @param rest - The rest manager to use to make the request.
|
||||
* @param guildId - The ID of the guild to get the rule of.
|
||||
* @param ruleId - The ID of the rule to get.
|
||||
* @returns An instance of {@link AutoModerationRule}.
|
||||
* @returns An instance of {@link DiscordAutoModerationRule}.
|
||||
*
|
||||
* @remarks
|
||||
* Requires the `MANAGE_GUILD` permission.
|
||||
@@ -20,12 +24,11 @@ export async function getAutomodRule (
|
||||
rest: RestManager,
|
||||
guildId: BigString,
|
||||
ruleId: BigString
|
||||
): Promise<AutoModerationRule> {
|
||||
): Promise<Camelize<DiscordAutoModerationRule>> {
|
||||
const result = await rest.runMethod<DiscordAutoModerationRule>(
|
||||
|
||||
'GET',
|
||||
routes.AUTOMOD_RULE(guildId, ruleId)
|
||||
)
|
||||
|
||||
return rest.transformers.automodRule(rest, result)
|
||||
return TRANSFORMERS.automodRule(result)
|
||||
}
|
||||
|
||||
@@ -1,15 +1,19 @@
|
||||
import { routes } from '@discordeno/constant'
|
||||
import type { BigString, DiscordAutoModerationRule } from '@discordeno/types'
|
||||
import TRANSFORMERS from '@discordeno/transformer'
|
||||
import type {
|
||||
BigString,
|
||||
Camelize,
|
||||
DiscordAutoModerationRule
|
||||
} from '@discordeno/types'
|
||||
import { Collection } from '@discordeno/utils'
|
||||
import type { RestManager } from '../../../restManager.js'
|
||||
import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
|
||||
/**
|
||||
* Gets the list of automod rules for a guild.
|
||||
*
|
||||
* @param rest - The rest manager to use to make the request.
|
||||
* @param guildId - The ID of the guild to get the rules from.
|
||||
* @returns A collection of {@link AutoModerationRule} objects assorted by rule ID.
|
||||
* @returns A collection of {@link DiscordAutoModerationRule} objects assorted by rule ID.
|
||||
*
|
||||
* @remarks
|
||||
* Requires the `MANAGE_GUILD` permission.
|
||||
@@ -19,16 +23,15 @@ import type { AutoModerationRule } from '../../../transformers/automodRule.js'
|
||||
export async function getAutomodRules (
|
||||
rest: RestManager,
|
||||
guildId: BigString
|
||||
): Promise<Collection<bigint, AutoModerationRule>> {
|
||||
): Promise<Collection<string, Camelize<DiscordAutoModerationRule>>> {
|
||||
const results = await rest.runMethod<DiscordAutoModerationRule[]>(
|
||||
|
||||
'GET',
|
||||
routes.AUTOMOD_RULES(guildId)
|
||||
)
|
||||
|
||||
return new Collection(
|
||||
results.map((result) => {
|
||||
const rule = rest.transformers.automodRule(rest, result)
|
||||
const rule = TRANSFORMERS.automodRule(result)
|
||||
return [rule.id, rule]
|
||||
})
|
||||
)
|
||||
|
||||
279
packages/rest/tests/e2e/automod.spec.ts
Normal file
279
packages/rest/tests/e2e/automod.spec.ts
Normal file
@@ -0,0 +1,279 @@
|
||||
import {
|
||||
AutoModerationActionType,
|
||||
AutoModerationEventTypes,
|
||||
AutoModerationTriggerTypes
|
||||
} from '@discordeno/types'
|
||||
import { expect } from 'chai'
|
||||
import { CACHED_COMMUNITY_GUILD_ID, rest } from './utils.js'
|
||||
|
||||
describe('[automod] Run automod tests', async () => {
|
||||
it('[automod] Create a MessageSend rule for Keyword with BlockMessage action.', async () => {
|
||||
const rule = await rest.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test',
|
||||
eventType: AutoModerationEventTypes.MessageSend,
|
||||
triggerType: AutoModerationTriggerTypes.Keyword,
|
||||
triggerMetadata: {
|
||||
keywordFilter: ['iblamewolf']
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
type: AutoModerationActionType.BlockMessage
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
expect(rule.id).to.be.exist
|
||||
|
||||
const fetchedRule = await rest.getAutomodRule(
|
||||
CACHED_COMMUNITY_GUILD_ID,
|
||||
rule.id
|
||||
)
|
||||
|
||||
expect(fetchedRule.id).to.be.exist
|
||||
expect(fetchedRule.name).to.equal(rule.name)
|
||||
expect(fetchedRule.eventType).to.equal(
|
||||
AutoModerationEventTypes.MessageSend
|
||||
)
|
||||
expect(fetchedRule.triggerType).to.equal(
|
||||
AutoModerationTriggerTypes.Keyword
|
||||
)
|
||||
expect(fetchedRule.triggerMetadata?.keywordFilter?.[0]).to.equal(
|
||||
'iblamewolf'
|
||||
)
|
||||
expect(fetchedRule.actions).to.be.exist
|
||||
expect(fetchedRule.actions[0]).to.be.exist
|
||||
expect(fetchedRule.actions[0].type).to.equal(
|
||||
AutoModerationActionType.BlockMessage
|
||||
)
|
||||
|
||||
await rest.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id)
|
||||
})
|
||||
|
||||
it('[automod] Create a MessageSend rule for Keyword with SendAlertMessage action.', async () => {
|
||||
const channel = await rest.createChannel(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test'
|
||||
})
|
||||
expect(channel.id).to.be.exist
|
||||
|
||||
const rule = await rest.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test',
|
||||
eventType: AutoModerationEventTypes.MessageSend,
|
||||
triggerType: AutoModerationTriggerTypes.Keyword,
|
||||
triggerMetadata: {
|
||||
keywordFilter: ['iblamewolf']
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
type: AutoModerationActionType.SendAlertMessage,
|
||||
metadata: {
|
||||
channelId: channel.id
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
expect(rule.id).to.be.exist
|
||||
|
||||
const fetchedRule = await rest.getAutomodRule(
|
||||
CACHED_COMMUNITY_GUILD_ID,
|
||||
rule.id
|
||||
)
|
||||
|
||||
expect(fetchedRule.id).to.be.exist
|
||||
expect(fetchedRule.name).to.equal(rule.name)
|
||||
expect(fetchedRule.eventType).to.equal(
|
||||
AutoModerationEventTypes.MessageSend
|
||||
)
|
||||
expect(fetchedRule.triggerType).to.equal(
|
||||
AutoModerationTriggerTypes.Keyword
|
||||
)
|
||||
expect(fetchedRule.triggerMetadata?.keywordFilter?.[0]).to.equal(
|
||||
'iblamewolf'
|
||||
)
|
||||
expect(fetchedRule.actions).to.be.exist
|
||||
expect(fetchedRule.actions[0]).to.be.exist
|
||||
expect(fetchedRule.actions[0].type).to.equal(
|
||||
AutoModerationActionType.SendAlertMessage
|
||||
)
|
||||
expect(fetchedRule.actions[0].metadata?.channelId).to.equal(channel.id)
|
||||
|
||||
await rest.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id)
|
||||
await rest.deleteChannel(channel.id)
|
||||
})
|
||||
|
||||
it('[automod] Create a MessageSend rule for Keyword with Timeout action.', async () => {
|
||||
const rule = await rest.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test',
|
||||
eventType: AutoModerationEventTypes.MessageSend,
|
||||
triggerType: AutoModerationTriggerTypes.Keyword,
|
||||
triggerMetadata: {
|
||||
keywordFilter: ['iblamewolf']
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
type: AutoModerationActionType.Timeout,
|
||||
metadata: {
|
||||
durationSeconds: 10
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
expect(rule.id).to.be.exist
|
||||
|
||||
const fetchedRule = await rest.getAutomodRule(
|
||||
CACHED_COMMUNITY_GUILD_ID,
|
||||
rule.id
|
||||
)
|
||||
|
||||
expect(fetchedRule.id).to.be.exist
|
||||
expect(fetchedRule.name).to.equal(rule.name)
|
||||
expect(fetchedRule.eventType).to.equal(
|
||||
AutoModerationEventTypes.MessageSend
|
||||
)
|
||||
expect(fetchedRule.triggerType).to.equal(
|
||||
AutoModerationTriggerTypes.Keyword
|
||||
)
|
||||
expect(fetchedRule.triggerMetadata?.keywordFilter?.[0]).to.equal(
|
||||
'iblamewolf'
|
||||
)
|
||||
expect(fetchedRule.actions).to.be.exist
|
||||
expect(fetchedRule.actions[0]).to.be.exist
|
||||
expect(fetchedRule.actions[0].type).to.equal(
|
||||
AutoModerationActionType.Timeout
|
||||
)
|
||||
expect(fetchedRule.actions[0].metadata?.durationSeconds).to.equal(10)
|
||||
|
||||
await rest.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id)
|
||||
})
|
||||
|
||||
it('[automod] Create a MessageSend rule for Keyword with BlockMessage & Timeout action.', async () => {
|
||||
const rule = await rest.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test',
|
||||
eventType: AutoModerationEventTypes.MessageSend,
|
||||
triggerType: AutoModerationTriggerTypes.Keyword,
|
||||
triggerMetadata: {
|
||||
keywordFilter: ['iblamewolf']
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
type: AutoModerationActionType.BlockMessage
|
||||
},
|
||||
{
|
||||
type: AutoModerationActionType.Timeout,
|
||||
metadata: {
|
||||
durationSeconds: 10
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
expect(rule.id).to.be.exist
|
||||
|
||||
await rest.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id)
|
||||
})
|
||||
|
||||
it('[automod] Create a MessageSend rule for Keyword with SendAlertMessage & Timeout action.', async () => {
|
||||
const channel = await rest.createChannel(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test'
|
||||
})
|
||||
expect(channel.id).to.be.exist
|
||||
|
||||
const rule = await rest.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test',
|
||||
eventType: AutoModerationEventTypes.MessageSend,
|
||||
triggerType: AutoModerationTriggerTypes.Keyword,
|
||||
triggerMetadata: {
|
||||
keywordFilter: ['iblamewolf']
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
type: AutoModerationActionType.SendAlertMessage,
|
||||
metadata: {
|
||||
channelId: channel.id
|
||||
}
|
||||
},
|
||||
{
|
||||
type: AutoModerationActionType.Timeout,
|
||||
metadata: {
|
||||
durationSeconds: 10
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
expect(rule.id).to.be.exist
|
||||
|
||||
await rest.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id)
|
||||
await rest.deleteChannel(channel.id)
|
||||
})
|
||||
|
||||
it('[automod] Create a MessageSend rule for Keyword with BlockMessage & SendAlertMessage & Timeout action.', async () => {
|
||||
const channel = await rest.createChannel(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test'
|
||||
})
|
||||
|
||||
const rule = await rest.createAutomodRule(CACHED_COMMUNITY_GUILD_ID, {
|
||||
name: 'test',
|
||||
eventType: AutoModerationEventTypes.MessageSend,
|
||||
triggerType: AutoModerationTriggerTypes.Keyword,
|
||||
triggerMetadata: {
|
||||
keywordFilter: ['iblamewolf']
|
||||
},
|
||||
actions: [
|
||||
{
|
||||
type: AutoModerationActionType.BlockMessage
|
||||
},
|
||||
{
|
||||
type: AutoModerationActionType.SendAlertMessage,
|
||||
metadata: {
|
||||
channelId: channel.id
|
||||
}
|
||||
},
|
||||
{
|
||||
type: AutoModerationActionType.Timeout,
|
||||
metadata: {
|
||||
durationSeconds: 10
|
||||
}
|
||||
}
|
||||
]
|
||||
})
|
||||
|
||||
expect(rule.id).to.be.exist
|
||||
|
||||
// Get the rule again to make sure it was created correctly
|
||||
const fetchedRule = await rest.getAutomodRule(
|
||||
CACHED_COMMUNITY_GUILD_ID,
|
||||
rule.id
|
||||
)
|
||||
expect(fetchedRule.id).to.be.exist
|
||||
expect(fetchedRule.name).to.equal(rule.name)
|
||||
expect(fetchedRule.eventType).to.equal(
|
||||
AutoModerationEventTypes.MessageSend
|
||||
)
|
||||
expect(fetchedRule.triggerType).to.equal(
|
||||
AutoModerationTriggerTypes.Keyword
|
||||
)
|
||||
expect(fetchedRule.triggerMetadata?.keywordFilter?.[0]).to.equal(
|
||||
'iblamewolf'
|
||||
)
|
||||
expect(fetchedRule.actions).to.be.exist
|
||||
expect(fetchedRule.actions[0]).to.be.exist
|
||||
expect(fetchedRule.actions[1].metadata).to.be.exist
|
||||
expect(fetchedRule.actions[2].metadata).to.be.exist
|
||||
expect(fetchedRule.actions[1].metadata.channelId).to.equal(channel.id)
|
||||
expect(fetchedRule.actions[2].metadata.durationSeconds).to.equal(10)
|
||||
expect(fetchedRule.actions[0].type).to.equal(
|
||||
AutoModerationActionType.BlockMessage
|
||||
)
|
||||
expect(fetchedRule.actions[1].type).to.equal(
|
||||
AutoModerationActionType.SendAlertMessage
|
||||
)
|
||||
expect(fetchedRule.actions[2].type).to.equal(
|
||||
AutoModerationActionType.Timeout
|
||||
)
|
||||
|
||||
await rest.deleteAutomodRule(CACHED_COMMUNITY_GUILD_ID, rule.id)
|
||||
await rest.deleteChannel(channel.id)
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user