diff --git a/assets/openapi.json b/assets/openapi.json index e8a0284..4c04573 100644 --- a/assets/openapi.json +++ b/assets/openapi.json @@ -10980,6 +10980,9 @@ "user": { "$ref": "#/components/schemas/PublicUser" }, + "user_id": { + "type": "string" + }, "authorizing_integration_owners": { "type": "object", "properties": {}, diff --git a/assets/schemas.json b/assets/schemas.json index 04c160a..5b8ea8d 100644 --- a/assets/schemas.json +++ b/assets/schemas.json @@ -98233,6 +98233,9 @@ "user": { "$ref": "#/definitions/PublicUser" }, + "user_id": { + "type": "string" + }, "authorizing_integration_owners": { "type": "object", "properties": {}, @@ -98535,6 +98538,9 @@ "user": { "$ref": "#/definitions/PublicUser" }, + "user_id": { + "type": "string" + }, "authorizing_integration_owners": { "type": "object", "properties": {}, @@ -99270,6 +99276,9 @@ "user": { "$ref": "#/definitions/PublicUser" }, + "user_id": { + "type": "string" + }, "authorizing_integration_owners": { "type": "object", "properties": {}, diff --git "a/src/api/routes/interactions/\043interaction_id/\043interaction_token/callback.ts" "b/src/api/routes/interactions/\043interaction_id/\043interaction_token/callback.ts" index 8a785ac..3be078e 100644 --- "a/src/api/routes/interactions/\043interaction_id/\043interaction_token/callback.ts" +++ "b/src/api/routes/interactions/\043interaction_id/\043interaction_token/callback.ts" @@ -20,6 +20,7 @@ import { route } from "@spacebar/api"; import { Request, Response, Router } from "express"; import { emitEvent, FieldErrors, InteractionSuccessEvent, Message, MessageCreateEvent, pendingInteractions, User } from "@spacebar/util"; +import { sendMessage } from "../../../../util/handlers/Message"; const router = Router({ mergeParams: true }); @@ -95,11 +96,11 @@ // TODO break; case InteractionCallbackType.CHANNEL_MESSAGE_WITH_SOURCE: { - const message = await Message.createWithDefaults({ + const user = await User.findOneOrFail({ where: { id: interaction.userId } }); + await sendMessage({ type: MessageType.APPLICATION_COMMAND, timestamp: new Date(), application_id: interaction.applicationId, - guild_id: interaction.guildId, channel_id: interaction.channelId, author_id: interaction.applicationId, content: body.data.content, @@ -115,11 +116,13 @@ id: interactionId, name: interaction.commandName, type: 2, + user, }, interaction_metadata: { id: interactionId, type: 2, user_id: interaction.userId, + user, authorizing_integration_owners: { "1": interaction.userId, }, @@ -128,53 +131,6 @@ }, }); - const user = await User.findOneOrFail({ where: { id: interaction.userId } }); - - // Don't save messages with ephemeral flag (64) set - if ((message.flags & (1 << 6)) == 0) { - message.save(); - } - - emitEvent({ - event: "MESSAGE_CREATE", - ...((message.flags & (1 << 6)) === 0 ? { channel_id: interaction.channelId } : { user_id: interaction.userId }), - data: { - application_id: interaction.applicationId, - attachments: message.attachments, - author: message.author?.toPublicUser(), - channel_id: message.channel_id, - channel_type: 0, - components: message.components, - content: message.content, - edited_timestamp: null, - embeds: message.embeds, - flags: message.flags, - id: message.id, - interaction: { - id: interactionId, - name: interaction.commandName, - type: interaction.type, - user, - }, - interaction_metadata: { - authorizing_integration_owners: { "1": interaction.userId }, - command_type: interaction.commandType, - id: interactionId, - name: interaction.commandName, - type: interaction.type, - user, - }, - mention_everyone: false, - mentions: [], - nonce: interaction.nonce, - pinned: false, - position: 0, - timestamp: message.timestamp, - tss: message.tts, - type: message.type, - webhook_id: interaction.applicationId, - } as MessageCreateSchema, - } as MessageCreateEvent); break; } case InteractionCallbackType.DEFERRED_CHANNEL_MESSAGE_WITH_SOURCE: diff --git a/src/api/util/handlers/Message.ts b/src/api/util/handlers/Message.ts index 6ba6698..1c1c29d 100644 --- a/src/api/util/handlers/Message.ts +++ b/src/api/util/handlers/Message.ts @@ -501,6 +501,7 @@ console.error(`[Embeds] Error while generating embed for ${link}`, e); } } + const ephermal = (message.flags & (1 << 6)) !== 0; await Promise.all([ emitEvent({ @@ -508,7 +509,7 @@ channel_id: message.channel_id, data, } as MessageUpdateEvent), - Message.update({ id: message.id, channel_id: message.channel_id }, { embeds: data.embeds }), + ephermal ? null : Message.update({ id: message.id, channel_id: message.channel_id }, { embeds: data.embeds }), ...cachePromises, ]); } @@ -516,11 +517,12 @@ export async function sendMessage(opts: MessageOptions) { const message = await handleMessage({ ...opts, timestamp: new Date() }); + const ephermal = (message.flags & (1 << 6)) !== 0; await Promise.all([ - Message.insert(message), + ephermal ? null : Message.insert(message), emitEvent({ event: "MESSAGE_CREATE", - channel_id: opts.channel_id, + ...(ephermal ? { user_id: message.interaction_metadata?.user_id } : { channel_id: message.channel_id }), data: message.toJSON(), } as MessageCreateEvent), ]); diff --git a/src/schemas/uncategorised/MessageCreateSchema.ts b/src/schemas/uncategorised/MessageCreateSchema.ts index e7592d0..4d32ead 100644 --- a/src/schemas/uncategorised/MessageCreateSchema.ts +++ b/src/schemas/uncategorised/MessageCreateSchema.ts @@ -89,6 +89,7 @@ command_type?: ApplicationCommandType; ephemerality_reason?: number; user?: PublicUser; // It has to be optional cause LSP gives an errors for some reason + user_id?: string; authorizing_integration_owners?: object; // It has to be optional cause LSP gives an errors for some reason original_response_message_id?: Snowflake; interacted_message_id?: Snowflake;