Skip to content

Commit

Permalink
fix(discord): fix message.guildId may be explicit set to undefined
Browse files Browse the repository at this point in the history
  • Loading branch information
shigma committed Jul 7, 2023
1 parent 8589aa1 commit 9524816
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
2 changes: 1 addition & 1 deletion adapters/discord/package.json
Original file line number Diff line number Diff line change
@@ -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": [
Expand Down
19 changes: 13 additions & 6 deletions adapters/discord/src/types/message.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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<GuildMember>
/** Users specifically mentioned in the message */
mentions: (User & { member: Partial<GuildMember> })[]
}

export interface Update extends Message {}
/** https://discord.com/developers/docs/topics/gateway-events#message-update */
export interface Update extends Partial<Message> {}

/** 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
Expand All @@ -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[]
Expand Down
21 changes: 12 additions & 9 deletions adapters/discord/src/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ export const encodeRole = (role: Partial<Universal.Role>): Partial<Discord.Role>
export async function decodeMessage(bot: DiscordBot, meta: Discord.Message, session: Partial<Session> = {}) {
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)
Expand Down Expand Up @@ -136,11 +136,10 @@ export async function decodeMessage(bot: DiscordBot, meta: Discord.Message, sess
return session as Universal.Message
}

export function setupMessage(session: Partial<Session>, data: Partial<Discord.Message>) {
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<Session>, guildId: string) {
session.guildId = guildId
session.isDirect = !guildId
session.subtype = guildId ? 'group' : 'private'
}

type ReactionEvent = Partial<
Expand Down Expand Up @@ -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)
Expand Down

0 comments on commit 9524816

Please sign in to comment.