From 9e83b0ef90f3f5b79c0d2d00bd74127c4450f1ae Mon Sep 17 00:00:00 2001 From: hi117 Date: Mon, 14 Oct 2024 00:16:10 -0400 Subject: [PATCH] discord: Add message_snapshot support (#453) * Add new type field https://discord.com/developers/docs/resources/message#message-reference-structure * Update with changes * Add message_snapshot * fixup * fixup * Convert Message to MessageSnapshotMessage --- discord/message.go | 65 ++++++++++++++++++++++++++++++++++++++++++++++ go.work.sum | 9 ++++--- 2 files changed, 71 insertions(+), 3 deletions(-) diff --git a/discord/message.go b/discord/message.go index 5e170c2..d534e6e 100644 --- a/discord/message.go +++ b/discord/message.go @@ -23,6 +23,9 @@ type Message struct { // Flags are the MessageFlags. Flags MessageFlags `json:"flags"` + // The message associated with the message_reference. This is a minimal subset of fields in a message (e.g. author is excluded.) + MessageSnapshots []MessageSnapshot `json:"message_snapshots,omitempty"` + // TTS specifies whether the was a TTS message. TTS bool `json:"tts"` // Pinned specifies whether the message is pinned. @@ -365,6 +368,65 @@ func (m MessageApplication) CreatedAt() time.Time { return m.ID.Time() } +// https://discord.com/developers/docs/resources/message#message-snapshot-object +type MessageSnapshotMessage struct { + // Type is the type of message. + Type MessageType `json:"type"` + + // Content contains the contents of the message. + Content string `json:"content"` + + // Embeds contains any embedded content. + Embeds []Embed `json:"embeds"` + + // Attachments contains any attached files. + Attachments []Attachment `json:"attachments"` + + // Timestamp specifies when the message was sent + Timestamp Timestamp `json:"timestamp,omitempty"` + + // EditedTimestamp specifies when this message was edited. + // + // IsValid() will return false, if the messages hasn't been edited. + EditedTimestamp Timestamp `json:"edited_timestamp,omitempty"` + + // Flags are the MessageFlags. + Flags MessageFlags `json:"flags"` + + // Mentions contains the users specifically mentioned in the message. + // + // The user objects in the mentions array will only have the partial + // member field present in MESSAGE_CREATE and MESSAGE_UPDATE events from + // text-based guild channels. + Mentions []GuildUser `json:"mentions"` + + // MentionRoleIDs contains the ids of the roles specifically mentioned in + // the message. + MentionRoleIDs []RoleID `json:"mention_roles"` + + // Stickers contains the sticker "items" sent with the message. + Stickers []StickerItem `json:"sticker_items,omitempty"` + + // Components contains any attached components. + Components ContainerComponents `json:"components,omitempty"` +} + +// https://discord.com/developers/docs/resources/message#message-snapshot-object +type MessageSnapshot struct { + // The embedded partial message object + Message *MessageSnapshotMessage `json:"message"` +} + +const ( + // A standard reference used by replies. + MessageReferenceTypeDefault MessageReferenceType = iota + // Reference used to point to a message at a point in time. + MessageReferenceTypeForward +) + +// Type of message reference +type MessageReferenceType int + // MessageReference is used in four situations: // // # Crosspost messages @@ -396,6 +458,9 @@ func (m MessageApplication) CreatedAt() time.Time { // When sending, only MessageID is required. // https://discord.com/developers/docs/resources/channel#message-object-message-reference-structure type MessageReference struct { + // If type is unset, DEFAULT can be assumed in order to match the behaviour before message reference + // had types. In future API versions this will become a required field. + Type MessageReferenceType `json:"type"` // MessageID is the id of the originating message. MessageID MessageID `json:"message_id,omitempty"` // ChannelID is the id of the originating message's channel. diff --git a/go.work.sum b/go.work.sum index be2e87b..cab7042 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1,3 +1,6 @@ -github.com/diamondburned/arikawa/v3 v3.0.0-rc.6/go.mod h1:5jBSNnp82Z/EhsKa6Wk9FsOqSxfVkNZDTDBPOj47LpY= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -golang.org/x/sys v0.0.0-20211001092434-39dca1131b70/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=