55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
package message
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"regexp"
|
|
)
|
|
|
|
// MfaceMessage QQ表情包消息
|
|
type MfaceMessage struct {
|
|
Type string `json:"type"`
|
|
Data MfaceMessageData `json:"data"`
|
|
}
|
|
|
|
type MfaceMessageData struct {
|
|
EmojiID string `json:"emoji_id"`
|
|
EmojiPackageID string `json:"emoji_package_id"`
|
|
Key string `json:"key"`
|
|
Summary string `json:"summary,omitempty"`
|
|
}
|
|
|
|
func init() {
|
|
RegisterMessageType(TypeMface, func() CQMessage {
|
|
return &MfaceMessage{Type: TypeMface}
|
|
})
|
|
}
|
|
|
|
func (msg *MfaceMessage) SetData(data json.RawMessage) error {
|
|
return json.Unmarshal(data, &msg.Data)
|
|
}
|
|
|
|
func (msg *MfaceMessage) ToCQString() string {
|
|
if msg.Data.Summary != "" {
|
|
return fmt.Sprintf("[CQ:mface,emoji_id=%s,emoji_package_id=%s,key=%s,summary=%s]",
|
|
msg.Data.EmojiID, msg.Data.EmojiPackageID, msg.Data.Key, msg.Data.Summary)
|
|
}
|
|
return fmt.Sprintf("[CQ:mface,emoji_id=%s,emoji_package_id=%s,key=%s]",
|
|
msg.Data.EmojiID, msg.Data.EmojiPackageID, msg.Data.Key)
|
|
}
|
|
|
|
func (msg *MfaceMessage) ParseMessage(data string) error {
|
|
re := regexp.MustCompile(`\[CQ:mface,emoji_id=(.*?),emoji_package_id=(.*?),key=(.*?)(?:,summary=(.*?))?\]`)
|
|
matches := re.FindStringSubmatch(data)
|
|
if len(matches) < 4 {
|
|
return fmt.Errorf("表情包数据格式不正确")
|
|
}
|
|
msg.Data.EmojiID = matches[1]
|
|
msg.Data.EmojiPackageID = matches[2]
|
|
msg.Data.Key = matches[3]
|
|
if len(matches) > 4 {
|
|
msg.Data.Summary = matches[4]
|
|
}
|
|
return nil
|
|
}
|