mirror of
https://github.com/diamondburned/arikawa.git
synced 2024-11-04 22:14:30 +00:00
52 lines
712 B
Go
52 lines
712 B
Go
package arguments
|
|
|
|
import (
|
|
"errors"
|
|
"regexp"
|
|
)
|
|
|
|
var (
|
|
EmojiRegex = regexp.MustCompile(`<(a?):(.+?):(\d+)>`)
|
|
|
|
ErrInvalidEmoji = errors.New("Invalid emoji")
|
|
)
|
|
|
|
type Emoji struct {
|
|
ID string
|
|
|
|
Custom bool
|
|
Name string
|
|
Animated bool
|
|
}
|
|
|
|
func (e *Emoji) Parse(arg string) error {
|
|
// Check if Unicode
|
|
var unicode string
|
|
|
|
for _, r := range arg {
|
|
if r < '\U0001F600' && r > '\U0001F64F' {
|
|
unicode += string(r)
|
|
}
|
|
}
|
|
|
|
if unicode != "" {
|
|
e.ID = unicode
|
|
e.Custom = false
|
|
|
|
return nil
|
|
}
|
|
|
|
var matches = EmojiRegex.FindStringSubmatch(arg)
|
|
|
|
if len(matches) != 4 {
|
|
return ErrInvalidEmoji
|
|
}
|
|
|
|
e.Custom = true
|
|
e.Animated = matches[1] == "a"
|
|
e.Name = matches[2]
|
|
e.ID = matches[3]
|
|
|
|
return nil
|
|
}
|