summary refs log tree commit diff
path: root/src/api
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-06-05 22:59:33 +0200
committerRory& <root@rory.gay>2026-06-05 22:59:33 +0200
commit0573c394cfb42af33c7ed56ae1729a506cde2e62 (patch)
treef7395f057c6378db28a2c525a2eff66c86ea3bc9 /src/api
parentLog silent attachment failures for webhooks (diff)
downloadserver-ts-0573c394cfb42af33c7ed56ae1729a506cde2e62.tar.xz
Use better permissions when handling webhook mentions
Diffstat (limited to 'src/api')
-rw-r--r--src/api/util/handlers/Message.ts11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts

index cfa68237..acfe7f31 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts
@@ -559,7 +559,8 @@ export async function postHandleMessage(message: Message) { embed.type ||= EmbedType.rich; }); - if ((await getPermission(message.author_id, message.channel.guild_id, message.channel_id)).has(Permissions.FLAGS.EMBED_LINKS)) await fillMessageUrlEmbeds(message); + if (message.isWebhook || (await getPermission(message.author_id, message.channel.guild_id, message.channel_id)).has(Permissions.FLAGS.EMBED_LINKS)) + await fillMessageUrlEmbeds(message); } export async function sendMessage(opts: MessageOptions) { @@ -675,7 +676,13 @@ async function handleMessageMentionsAsync(message: Message) { }); trace.calls.push(`getChannel(${channel.id})`, { micros: sw.getElapsedAndReset().totalMicroseconds }); - const permission = await getPermission(message.author_id ?? message.author?.id, channel.guild_id, channel); + const permissionTargetId = message.isWebhook ? message.webhook?.application_id : (message.author_id ?? message.author?.id); + const permission = + permissionTargetId != null + ? await getPermission(permissionTargetId, channel.guild_id, channel) + : message.guild_id != null + ? new Permissions((await Role.findOneOrFail({ where: { id: message.guild_id ?? message.guild?.id } })).permissions) + : Permissions.DEFAULT_DM_PERMISSIONS; trace.calls.push(`getPermissions`, { micros: sw.getElapsedAndReset().totalMicroseconds }); let content = message.content;