forked from pothtonswer/discordmuffin
update Activity struct and add emoji functions (#895)
* update Activity struct and add emoji functions * fix the emoji regex * Remove inline type definitions * Change function name * fix message_test function name * make custom unmarshaljson and change `CreatedAt` to `time.Time` * fix Co-authored-by: post <61803796+postrequest69@users.noreply.github.com>
This commit is contained in:
parent
a5f1f303a9
commit
4f55d76981
3 changed files with 104 additions and 3 deletions
18
message.go
18
message.go
|
@ -125,6 +125,24 @@ type Message struct {
|
||||||
Flags MessageFlags `json:"flags"`
|
Flags MessageFlags `json:"flags"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetCustomEmojis pulls out all the custom (Non-unicode) emojis from a message and returns a Slice of the Emoji struct.
|
||||||
|
func (m *Message) GetCustomEmojis() []*Emoji {
|
||||||
|
var toReturn []*Emoji
|
||||||
|
emojis := EmojiRegex.FindAllString(m.Content, -1)
|
||||||
|
if len(emojis) < 1 {
|
||||||
|
return toReturn
|
||||||
|
}
|
||||||
|
for _, em := range emojis {
|
||||||
|
parts := strings.Split(em, ":")
|
||||||
|
toReturn = append(toReturn, &Emoji{
|
||||||
|
ID: parts[2][:len(parts[2])-1],
|
||||||
|
Name: parts[1],
|
||||||
|
Animated: strings.HasPrefix(em, "<a:"),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return toReturn
|
||||||
|
}
|
||||||
|
|
||||||
// MessageFlags is the flags of "message" (see MessageFlags* consts)
|
// MessageFlags is the flags of "message" (see MessageFlags* consts)
|
||||||
// https://discord.com/developers/docs/resources/channel#message-object-message-flags
|
// https://discord.com/developers/docs/resources/channel#message-object-message-flags
|
||||||
type MessageFlags int
|
type MessageFlags int
|
||||||
|
|
|
@ -38,3 +38,15 @@ func TestContentWithMoreMentionsReplaced(t *testing.T) {
|
||||||
t.Error(result)
|
t.Error(result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
func TestGettingEmojisFromMessage(t *testing.T) {
|
||||||
|
msg := "test test <:kitty14:811736565172011058> <:kitty4:811736468812595260>"
|
||||||
|
m := &Message{
|
||||||
|
Content: msg,
|
||||||
|
}
|
||||||
|
emojis := m.GetCustomEmojis()
|
||||||
|
if len(emojis) < 1 {
|
||||||
|
t.Error("No emojis found.")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
71
structs.go
71
structs.go
|
@ -16,6 +16,7 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"math"
|
"math"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
@ -353,6 +354,11 @@ type Emoji struct {
|
||||||
Available bool `json:"available"`
|
Available bool `json:"available"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EmojiRegex is the regex used to find and identify emojis in messages
|
||||||
|
var (
|
||||||
|
EmojiRegex = regexp.MustCompile(`<(a|):[A-z0-9_~]+:[0-9]{18}>`)
|
||||||
|
)
|
||||||
|
|
||||||
// MessageFormat returns a correctly formatted Emoji for use in Message content and embeds
|
// MessageFormat returns a correctly formatted Emoji for use in Message content and embeds
|
||||||
func (e *Emoji) MessageFormat() string {
|
func (e *Emoji) MessageFormat() string {
|
||||||
if e.ID != "" && e.Name != "" {
|
if e.ID != "" && e.Name != "" {
|
||||||
|
@ -1117,6 +1123,71 @@ type Activity struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Type ActivityType `json:"type"`
|
Type ActivityType `json:"type"`
|
||||||
URL string `json:"url,omitempty"`
|
URL string `json:"url,omitempty"`
|
||||||
|
CreatedAt time.Time `json:"created_at"`
|
||||||
|
ApplicationID string `json:"application_id,omitempty"`
|
||||||
|
State string `json:"state,omitempty"`
|
||||||
|
Details string `json:"details,omitempty"`
|
||||||
|
Timestamps TimeStamps `json:"timestamps,omitempty"`
|
||||||
|
Emoji Emoji `json:"emoji,omitempty"`
|
||||||
|
Party Party `json:"party,omitempty"`
|
||||||
|
Assets Assets `json:"assets,omitempty"`
|
||||||
|
Secrets Secrets `json:"secrets,omitempty"`
|
||||||
|
Instance bool `json:"instance,omitempty"`
|
||||||
|
Flags int `json:"flags,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON is a custom unmarshaljson to make CreatedAt a time.Time instead of an int
|
||||||
|
func (activity *Activity) UnmarshalJSON(b []byte) error {
|
||||||
|
temp := struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Type ActivityType `json:"type"`
|
||||||
|
URL string `json:"url,omitempty"`
|
||||||
|
CreatedAt int64 `json:"created_at"`
|
||||||
|
ApplicationID string `json:"application_id,omitempty"`
|
||||||
|
State string `json:"state,omitempty"`
|
||||||
|
Details string `json:"details,omitempty"`
|
||||||
|
Timestamps TimeStamps `json:"timestamps,omitempty"`
|
||||||
|
Emoji Emoji `json:"emoji,omitempty"`
|
||||||
|
Party Party `json:"party,omitempty"`
|
||||||
|
Assets Assets `json:"assets,omitempty"`
|
||||||
|
Secrets Secrets `json:"secrets,omitempty"`
|
||||||
|
Instance bool `json:"instance,omitempty"`
|
||||||
|
Flags int `json:"flags,omitempty"`
|
||||||
|
}{}
|
||||||
|
err := json.Unmarshal(b, &temp)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
activity.CreatedAt = time.Unix(0, temp.CreatedAt*1000000)
|
||||||
|
activity.ApplicationID = temp.ApplicationID
|
||||||
|
activity.Assets = temp.Assets
|
||||||
|
activity.Details = temp.Details
|
||||||
|
activity.Emoji = temp.Emoji
|
||||||
|
activity.Flags = temp.Flags
|
||||||
|
activity.Instance = temp.Instance
|
||||||
|
activity.Name = temp.Name
|
||||||
|
activity.Party = temp.Party
|
||||||
|
activity.Secrets = temp.Secrets
|
||||||
|
activity.State = temp.State
|
||||||
|
activity.Timestamps = temp.Timestamps
|
||||||
|
activity.Type = temp.Type
|
||||||
|
activity.URL = temp.URL
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Party defines the Party field in the Activity struct
|
||||||
|
// https://discord.com/developers/docs/topics/gateway#activity-object
|
||||||
|
type Party struct {
|
||||||
|
ID string `json:"id,omitempty"`
|
||||||
|
Size []int `json:"size,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Secrets defines the Secrets field for the Activity struct
|
||||||
|
// https://discord.com/developers/docs/topics/gateway#activity-object
|
||||||
|
type Secrets struct {
|
||||||
|
Join string `json:"join,omitempty"`
|
||||||
|
Spectate string `json:"spectate,omitempty"`
|
||||||
|
Match string `json:"match,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// ActivityType is the type of Activity (see ActivityType* consts) in the Activity struct
|
// ActivityType is the type of Activity (see ActivityType* consts) in the Activity struct
|
||||||
|
|
Loading…
Reference in a new issue