Skip to content

Commit 90938a4

Browse files
committed
Better message default handling
1 parent 78bcb19 commit 90938a4

File tree

8 files changed

+35
-20
lines changed

8 files changed

+35
-20
lines changed

backend/src/common/schema/message.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const MessageLiteral = message(z.string());
1010
export type MessageLiteral = z.infer<typeof MessageLiteral>;
1111

1212
export function messageTemplate<S extends TemplateSchema>(schema: S) {
13-
return message(template(schema))
13+
const result = message(template(schema))
1414
.transform(({ content, embeds, ...message }) => (params: ParameterRecord<S>) => ({
1515
content: content?.(params),
1616
embeds: embeds?.map(
@@ -40,6 +40,14 @@ export function messageTemplate<S extends TemplateSchema>(schema: S) {
4040
) ?? [],
4141
...message
4242
}));
43+
44+
// @ts-expect-error avoid parsing constantly
45+
result.prefault = content => {
46+
const parsed = result.parse(content);
47+
return result.default(() => parsed);
48+
};
49+
50+
return result;
4351
}
4452

4553
function message<Z extends z.ZodTypeAny>(stringType: Z) {

backend/src/plugin/core/discord/command/about.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ const LIBRARIES = `
1212
[PostgreSQL](https://www.postgresql.org/) with [node-postgres](https://node-postgres.com/),
1313
[Hono](https://hono.dev/),
1414
[smol-toml](https://github.com/squirrelchat/smol-toml),
15-
[Valibot](https://valibot.dev/),
15+
[Zod](https://zod.dev/),
1616
and [more](${APP_LIBRARIES_LINK})
1717
`.substring(1).replaceAll("\n", " ");
1818

backend/src/plugin/core/discord/configSync.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ async function parseConfig(guildID: string, pluginID: string, configCache: Confi
159159
var result = configCache.schema.safeParse(table);
160160
} catch (error) {
161161
// if our code is broken it might throw
162-
logger.error?.("Unexpected error in valibot safeParse (bug)", error);
162+
logger.error?.("Unexpected error in zod safeParse (bug)", error);
163163
return null;
164164
}
165165

backend/src/plugin/moderation/config.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,9 @@ export const ModerationConfig = z.strictObject({
4848

4949
ban: z.strictObject({
5050
send_direct_message: z.boolean().default(false),
51-
direct_message: messageTemplate(actionParams).optional(),
51+
direct_message: messageTemplate(actionParams).prefault({
52+
content: "You are banned from {{server}}:\n{{>reason}}"
53+
}),
5254
purge_messages: z.number().default(0).transform(input => input * DAY),
5355
preset_reasons: PresetReason.array().default(discordReasons) // TODO
5456
}).prefault({}).describe("Configure ban behavior"),
@@ -59,19 +61,28 @@ export const ModerationConfig = z.strictObject({
5961

6062
kick: z.strictObject({
6163
send_direct_message: z.boolean().default(false),
62-
direct_message: messageTemplate(actionParams).optional(),
64+
direct_message: messageTemplate(actionParams).prefault({
65+
content: "You were kicked from {{server}}:\n{{>reason}}"
66+
}),
6367
preset_reasons: PresetReason.array().default(discordReasons), // TODO
6468
}).prefault({}).describe("Configure kick behavior"),
6569

6670
timeout: z.strictObject({
6771
send_direct_message: z.boolean().default(false),
68-
direct_message: messageTemplate({ ...actionParams, duration: ParameterType.Duration }).optional(),
72+
direct_message: messageTemplate({
73+
...actionParams,
74+
duration: ParameterType.Duration
75+
}).prefault({
76+
content: "You were timed out in {{server}} for {{duration}}:\n{{>reason}}"
77+
}),
6978
preset_reasons: PresetReason.array().default(discordReasons), // TODO
7079
}).prefault({}).describe("Configure timeout behavior"),
7180

7281
warn: z.strictObject({
7382
send_direct_message: z.boolean().default(false),
74-
direct_message: messageTemplate(actionParams).optional(),
83+
direct_message: messageTemplate(actionParams).prefault({
84+
content: "You were warned in {{server}}:\n{{>reason}}"
85+
}),
7586
preset_reasons: PresetReason.array().default(discordReasons),
7687
}).prefault({}).describe("Configure warn behavior"),
7788

backend/src/plugin/moderation/discord/command/action/ban.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { escapeMarkdown } from "#common/discord/markdown.ts";
21
import { OptionType } from "#plugin/core/discord/public/command.ts";
32
import { defineCommand } from "#plugin/core/discord/public/extensionPoints.ts";
43
import { permissionsGuard } from "#plugin/core/discord/public/helper/commandGuards.ts";
@@ -42,11 +41,11 @@ export default defineCommand({
4241
async run(context, args, { config }) {
4342
const sendDirectMessage = args.dm ?? config.ban.send_direct_message;
4443
const directMessage = sendDirectMessage
45-
? config.ban.direct_message?.({
44+
? config.ban.direct_message({
4645
server: context.guild,
4746
moderator: context.user,
4847
reason: args.reason ?? undefined,
49-
}) ?? { content: `You were banned from **${escapeMarkdown(context.guild.name)}**.` }
48+
})
5049
: undefined;
5150

5251
const deleteMessageSeconds = (args.purge ?? config.ban.purge_messages);

backend/src/plugin/moderation/discord/command/action/kick.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { escapeMarkdown } from "#common/discord/markdown.ts";
21
import { OptionType } from "#plugin/core/discord/public/command.ts";
32
import { defineCommand } from "#plugin/core/discord/public/extensionPoints.ts";
43
import { permissionsGuard } from "#plugin/core/discord/public/helper/commandGuards.ts";
@@ -39,12 +38,12 @@ export default defineCommand({
3938
const sendDirectMessage = args.dm ?? config.ban.send_direct_message;
4039
const directMessage: CreateMessageOptions | undefined =
4140
sendDirectMessage ?
42-
config.ban.direct_message?.({
41+
config.ban.direct_message({
4342
server: context.guild,
4443
moderator: context.user,
4544
reason: args.reason ?? undefined,
46-
}) ?? { content: `You were kicked from **${escapeMarkdown(context.guild.name)}**.` } :
47-
undefined;
45+
})
46+
: undefined;
4847

4948
const { successful, unsuccessful } = await doBulkAction({
5049
guild: context.guild,

backend/src/plugin/moderation/discord/command/action/timeout.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { escapeMarkdown } from "#common/discord/markdown.ts";
21
import { OptionType } from "#plugin/core/discord/public/command.ts";
32
import { defineCommand } from "#plugin/core/discord/public/extensionPoints.ts";
43
import { permissionsGuard } from "#plugin/core/discord/public/helper/commandGuards.ts";
@@ -45,12 +44,12 @@ export default defineCommand({
4544
async run(context, args, { config }) {
4645
const sendDirectMessage = args.dm ?? config.timeout.send_direct_message;
4746
const directMessage = sendDirectMessage
48-
? config.timeout.direct_message?.({
47+
? config.timeout.direct_message({
4948
server: context.guild,
5049
moderator: context.user,
5150
reason: args.reason ?? undefined,
5251
duration: args.duration,
53-
}) ?? { content: `You were timed out for **${args.duration}** in **${escapeMarkdown(context.guild.name)}**` }
52+
})
5453
: undefined;
5554

5655
const { successful, unsuccessful } = await doBulkAction({

backend/src/plugin/moderation/discord/command/action/warn.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { escapeMarkdown } from "#common/discord/markdown.ts";
21
import { OptionType } from "#plugin/core/discord/public/command.ts";
32
import { defineCommand } from "#plugin/core/discord/public/extensionPoints.ts";
43
import { permissionsGuard } from "#plugin/core/discord/public/helper/commandGuards.ts";
@@ -37,11 +36,11 @@ export default defineCommand({
3736
async run(context, args, { config }): Promise<void> {
3837
const sendDirectMessage = args.dm ?? config.ban.send_direct_message;
3938
const directMessage = sendDirectMessage
40-
? config.warn.direct_message?.({
39+
? config.warn.direct_message({
4140
server: context.guild,
4241
moderator: context.user,
4342
reason: args.reason ?? undefined,
44-
}) ?? { content: `You received a warning in **${escapeMarkdown(context.guild.name)}**:\n>>> ${args.reason ?? "*No reason provided*"}` }
43+
})
4544
: undefined;
4645

4746
const { successful, unsuccessful } = await doBulkAction({

0 commit comments

Comments
 (0)