-
Notifications
You must be signed in to change notification settings - Fork 1
/
message.go
154 lines (136 loc) · 5.04 KB
/
message.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
package objects
import (
"fmt"
"strconv"
)
//go:generate stringer -type=MessageType,MessageActivityType,MessageFlag,MessageStickerFormat -output message_string.go
type MessageType uint
const (
MessageTypeDefault MessageType = iota
MessageTypeRecipientAdd
MessageTypeRecipientRemove
MessageTypeCall
MessageTypeChannelNameChange
MessageTypeChannelIconChange
MessageTypeChannelPinnedMessage
MessageTypeGuildMemberJoin
MessageTypeUserPremiumGuildSubscription
MessageTypeUserPremiumGuildSubscriptionTier1
MessageTypeUserPremiumGuildSubscriptionTier2
MessageTypeUserPremiumGuildSubscriptionTier3
MessageTypeChannelFollowAdd
_
MessageTypeGuildDiscoveryDisqualified
MessageTypeGuildDiscoveryRequalified
MessageTypeGuildDiscoveryGracePeriodInitialWarning
MessageTypeGuildDiscoveryGracePeriodFinalWarning
_
MessageTypeReply
MessageTypeApplicationCommand
)
type MessageActivityType uint
const (
MessageActivityTypeJoin MessageActivityType = iota + 1
MessageActivityTypeSpectate
MessageActivityTypeListen
_
MessageActivityTypeJoinRequest
)
type MessageFlag uint
const (
MsgFlagCrossposted MessageFlag = 1 << iota
MsgFlagIsCrosspost
MsgFlagSupressEmbeds
MsgFlagSourceMessageDeleted
MsgFlagUrgent
_
MsgFlagEphemeral
MsgFlagLoading
)
type MessageStickerFormat uint
const (
PNGStickerFormat MessageStickerFormat = iota + 1
APNGStickerFormat
LottieStickerFormat
)
type Message struct {
ID Snowflake `json:"id"`
ChannelID Snowflake `json:"channel_id"`
GuildID Snowflake `json:"guild_id,omitempty"`
Author *User `json:"author"`
Member *GuildMember `json:"member,omitempty"`
Content string `json:"content"`
Timestamp Time `json:"timestamp"`
EditedTimestamp Time `json:"edited_timestamp"`
TTS bool `json:"tts"`
MentionEveryone bool `json:"mention_everyone"`
Mentions []*User `json:"mentions,omitempty"`
MentionRoles []Snowflake `json:"mention_roles,omitempty"`
MentionChannels []*ChannelMention `json:"mention_channels,omitempty"`
Attachments []*Attachment `json:"attachments,omitempty"`
Embeds []*Embed `json:"embeds"`
Reactions []*Reaction `json:"reactions,omitempty"`
Nonce interface{} `json:"nonce,omitempty"`
Pinned bool `json:"pinned"`
WebhookID Snowflake `json:"webhook_id,omitempty"`
Type MessageType `json:"type"`
Activity *MessageActivity `json:"activity,omitempty"`
Application *MessageApplication `json:"application,omitempty"`
ApplicationID Snowflake `json:"application_id"`
MessageReference *MessageReference `json:"message_reference,omitempty"`
Flags MessageFlag `json:"flags,omitempty"`
ReferencedMessage *Message `json:"referenced_message,omitempty"`
Interaction *MessageInteraction `json:"interaction,omitempty"`
Thread *Channel `json:"thread,omitempty"`
Components []*Component `json:"components,omitempty"`
StickerItems []*StickerItem `json:"sticker_items"`
Stickers []*Sticker `json:"stickers,omitempty"`
}
func (m *Message) URL() string {
guild := "@me"
if m.GuildID != Snowflake(0) {
guild = strconv.FormatUint(uint64(m.GuildID), 10)
}
return fmt.Sprintf("https://discord.com/channels/%s/%d/%d", guild, m.ChannelID, m.ID)
}
type MessageInteraction struct {
ID Snowflake `json:"id"`
Type InteractionType `json:"type"`
Name string `json:"name"`
User *User `json:"user"`
}
type MessageActivity struct {
Type MessageActivityType `json:"type"`
PartyID string `json:"party_id,omitempty"`
}
type MessageReference struct {
MessageID Snowflake `json:"message_id,omitempty"`
ChannelID Snowflake `json:"channel_id,omitempty"`
GuildID Snowflake `json:"guild_id,omitempty"`
FailIfNotExists *bool `json:"fail_if_not_exists,omitempty"`
}
type MessageApplication struct {
ID Snowflake `json:"id"`
CoverImage string `json:"cover_image,omitempty"`
Description string `json:"description"`
Icon string `json:"icon,omitempty"`
Name string `json:"name"`
}
type Attachment struct {
ID Snowflake `json:"id"`
Filename string `json:"filename,omitempty"`
Description string `json:"description,omitempty"`
ContentType string `json:"content_type,omitempty"`
Size int `json:"size,omitempty"`
URL string `json:"url,omitempty"`
ProxyURL string `json:"proxy_url,omitempty"`
Height int `json:"height,omitempty"`
Width int `json:"width,omitempty"`
Ephemeral bool `json:"ephemeral,omitempty"`
}
type ChannelMention struct {
ID Snowflake `json:"id"`
GuildID Snowflake `json:"guild_id"`
Type ChannelType `json:"type"`
Name string `json:"name"`
}