From 95248166125bd19abdeacc7bc0f16a18cf6d765a Mon Sep 17 00:00:00 2001 From: Shigma Date: Sat, 8 Jul 2023 02:04:48 +0800 Subject: [PATCH] fix(discord): fix message.guildId may be explicit set to undefined --- adapters/discord/package.json | 2 +- adapters/discord/src/types/message.ts | 19 +++++++++++++------ adapters/discord/src/utils.ts | 21 ++++++++++++--------- 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/adapters/discord/package.json b/adapters/discord/package.json index b35cbb60..5872e90a 100644 --- a/adapters/discord/package.json +++ b/adapters/discord/package.json @@ -1,7 +1,7 @@ { "name": "@satorijs/adapter-discord", "description": "Discord Adapter for Satorijs", - "version": "3.8.0", + "version": "3.8.2", "main": "lib/index.js", "typings": "lib/index.d.ts", "files": [ diff --git a/adapters/discord/src/types/message.ts b/adapters/discord/src/types/message.ts index bb93f9d0..56789f7b 100644 --- a/adapters/discord/src/types/message.ts +++ b/adapters/discord/src/types/message.ts @@ -6,8 +6,6 @@ export interface Message { id: snowflake /** id of the channel the message was sent in */ channel_id: snowflake - /** id of the guild the message was sent in */ - guild_id?: snowflake /** the author of this message (not guaranteed to be a valid user, see below) */ author: User /** member properties for this message's author */ @@ -343,11 +341,20 @@ export interface ChannelMention { export namespace Message { export namespace Event { - export interface Create extends Message {} + /** https://discord.com/developers/docs/topics/gateway-events#message-create */ + export interface Create extends Message { + /** ID of the guild the message was sent in - unless it is an ephemeral message */ + guild_id?: snowflake + /** Member properties for this message's author. Missing for ephemeral messages and messages from webhooks */ + member?: Partial + /** Users specifically mentioned in the message */ + mentions: (User & { member: Partial })[] + } - export interface Update extends Message {} + /** https://discord.com/developers/docs/topics/gateway-events#message-update */ + export interface Update extends Partial {} - /** https://discord.com/developers/docs/topics/gateway-events#message-delete-message-delete-event-fields */ + /** https://discord.com/developers/docs/topics/gateway-events#message-delete-message-delete */ export interface Delete { /** the id of the message */ id: snowflake @@ -357,7 +364,7 @@ export namespace Message { guild_id?: snowflake } - /** https://discord.com/developers/docs/topics/gateway-events#message-delete-bulk-message-delete-bulk-event-fields */ + /** https://discord.com/developers/docs/topics/gateway-events#message-delete-bulk-message-delete-bulk */ export interface DeleteBulk { /** the ids of the messages */ ids: snowflake[] diff --git a/adapters/discord/src/utils.ts b/adapters/discord/src/utils.ts index 7abcd37c..bbde0e6d 100644 --- a/adapters/discord/src/utils.ts +++ b/adapters/discord/src/utils.ts @@ -46,8 +46,8 @@ export const encodeRole = (role: Partial): Partial export async function decodeMessage(bot: DiscordBot, meta: Discord.Message, session: Partial = {}) { const { platform } = bot - setupMessage(session, meta) session.messageId = meta.id + session.channelId = meta.channel_id session.timestamp = new Date(meta.timestamp).valueOf() || Date.now() if (meta.author) { session.author = decodeAuthor(meta.author) @@ -136,11 +136,10 @@ export async function decodeMessage(bot: DiscordBot, meta: Discord.Message, sess return session as Universal.Message } -export function setupMessage(session: Partial, data: Partial) { - session.guildId = data.guild_id - session.isDirect = !data.guild_id - session.subtype = data.guild_id ? 'group' : 'private' - session.channelId = data.channel_id +export function setupMessageGuildId(session: Partial, guildId: string) { + session.guildId = guildId + session.isDirect = !guildId + session.subtype = guildId ? 'group' : 'private' } type ReactionEvent = Partial< @@ -173,19 +172,23 @@ export async function adaptSession(bot: DiscordBot, input: Discord.Gateway.Paylo } session.type = 'message' await decodeMessage(bot, input.d, session) + setupMessageGuildId(session, input.d.guild_id) // dc 情况特殊 可能有 embeds 但是没有消息主体 // if (!session.content) return } else if (input.t === 'MESSAGE_UPDATE') { session.type = 'message-updated' - const msg = await bot.internal.getChannelMessage(input.d.channel_id, input.d.id) + const message = await bot.internal.getChannelMessage(input.d.channel_id, input.d.id) // Unlike creates, message updates may contain only a subset of the full message object payload // https://discord.com/developers/docs/topics/gateway-events#message-update - await decodeMessage(bot, msg, session) + await decodeMessage(bot, message, session) + const channel = await bot.internal.getChannel(input.d.channel_id) + setupMessageGuildId(session, channel.guild_id) // if (!session.content) return } else if (input.t === 'MESSAGE_DELETE') { session.type = 'message-deleted' session.messageId = input.d.id - setupMessage(session, input.d) + session.channelId = input.d.channel_id + setupMessageGuildId(session, input.d.guild_id) } else if (input.t === 'MESSAGE_REACTION_ADD') { session.type = 'reaction-added' setupReaction(session, input.d)