mirror of
https://github.com/Mrs4s/MiraiGo.git
synced 2025-05-04 11:07:40 +08:00
feat: at channel support
This commit is contained in:
parent
66ad12db03
commit
68e387e91b
@ -43,9 +43,13 @@ func init() {
|
|||||||
|
|
||||||
func (s *GuildService) SendGuildChannelMessage(guildId, channelId uint64, m *message.SendingMessage) (*message.GuildChannelMessage, error) {
|
func (s *GuildService) SendGuildChannelMessage(guildId, channelId uint64, m *message.SendingMessage) (*message.GuildChannelMessage, error) {
|
||||||
mr := rand.Uint32() // 客户端似乎是生成的 u32 虽然类型是u64
|
mr := rand.Uint32() // 客户端似乎是生成的 u32 虽然类型是u64
|
||||||
at := m.FirstOrNil(func(e message.IMessageElement) bool { return e.Type() == message.At })
|
for _, elem := range m.Elements {
|
||||||
if at != nil {
|
if elem.Type() == message.At {
|
||||||
at.(*message.AtElement).Guild = true
|
at := elem.(*message.AtElement)
|
||||||
|
if at.SubType == message.AtTypeGroupMember {
|
||||||
|
at.SubType = message.AtTypeGuildMember
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
req := &channel.DF62ReqBody{Msg: &channel.ChannelMsgContent{
|
req := &channel.DF62ReqBody{Msg: &channel.ChannelMsgContent{
|
||||||
Head: &channel.ChannelMsgHead{
|
Head: &channel.ChannelMsgHead{
|
||||||
|
@ -41,7 +41,7 @@ type FaceElement struct {
|
|||||||
type AtElement struct {
|
type AtElement struct {
|
||||||
Target int64
|
Target int64
|
||||||
Display string
|
Display string
|
||||||
Guild bool
|
SubType AtType
|
||||||
}
|
}
|
||||||
|
|
||||||
type GroupFileElement struct {
|
type GroupFileElement struct {
|
||||||
@ -107,6 +107,7 @@ type AnimatedSticker struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type RedBagMessageType int
|
type RedBagMessageType int
|
||||||
|
type AtType int
|
||||||
|
|
||||||
// /com/tencent/mobileqq/data/MessageForQQWalletMsg.java
|
// /com/tencent/mobileqq/data/MessageForQQWalletMsg.java
|
||||||
const (
|
const (
|
||||||
@ -130,6 +131,10 @@ const (
|
|||||||
RedBagWordChain RedBagMessageType = 24
|
RedBagWordChain RedBagMessageType = 24
|
||||||
RedBagKeyword RedBagMessageType = 25 // ?
|
RedBagKeyword RedBagMessageType = 25 // ?
|
||||||
RedBagDrawMultiModel RedBagMessageType = 26 // ??
|
RedBagDrawMultiModel RedBagMessageType = 26 // ??
|
||||||
|
|
||||||
|
AtTypeGroupMember = 0 // At群成员
|
||||||
|
AtTypeGuildMember = 1 // At频道成员
|
||||||
|
AtTypeGuildChannel = 2 // At频道
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewText(s string) *TextElement {
|
func NewText(s string) *TextElement {
|
||||||
|
@ -379,13 +379,21 @@ func ParseMessageElems(elems []*msg.Elem) []IMessageElement {
|
|||||||
att6 := binary.NewReader(elem.Text.Attr6Buf)
|
att6 := binary.NewReader(elem.Text.Attr6Buf)
|
||||||
att6.ReadBytes(7)
|
att6.ReadBytes(7)
|
||||||
target := int64(uint32(att6.ReadInt32()))
|
target := int64(uint32(att6.ReadInt32()))
|
||||||
res = append(res, NewAt(target, elem.Text.GetStr()))
|
at := NewAt(target, elem.Text.GetStr())
|
||||||
|
at.SubType = AtTypeGroupMember
|
||||||
|
res = append(res, at)
|
||||||
case len(elem.Text.PbReserve) > 0:
|
case len(elem.Text.PbReserve) > 0:
|
||||||
resv := new(msg.TextResvAttr)
|
resv := new(msg.TextResvAttr)
|
||||||
_ = proto.Unmarshal(elem.Text.PbReserve, resv)
|
_ = proto.Unmarshal(elem.Text.PbReserve, resv)
|
||||||
if resv.GetAtType() == 2 {
|
if resv.GetAtType() == 2 {
|
||||||
at := NewAt(int64(resv.GetAtMemberTinyid()), elem.Text.GetStr())
|
at := NewAt(int64(resv.GetAtMemberTinyid()), elem.Text.GetStr())
|
||||||
at.Guild = true
|
at.SubType = AtTypeGuildMember
|
||||||
|
res = append(res, at)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
if resv.GetAtType() == 4 {
|
||||||
|
at := NewAt(int64(resv.AtChannelInfo.GetChannelId()), elem.Text.GetStr())
|
||||||
|
at.SubType = AtTypeGuildChannel
|
||||||
res = append(res, at)
|
res = append(res, at)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -56,15 +56,8 @@ func (e *FaceElement) Pack() (r []*msg.Elem) {
|
|||||||
|
|
||||||
func (e *AtElement) Pack() (r []*msg.Elem) {
|
func (e *AtElement) Pack() (r []*msg.Elem) {
|
||||||
r = []*msg.Elem{}
|
r = []*msg.Elem{}
|
||||||
if e.Guild {
|
switch e.SubType {
|
||||||
pb, _ := proto.Marshal(&msg.TextResvAttr{AtType: proto.Uint32(2), AtMemberTinyid: proto.Uint64(uint64(e.Target))})
|
case AtTypeGroupMember:
|
||||||
r = append(r, &msg.Elem{
|
|
||||||
Text: &msg.Text{
|
|
||||||
Str: &e.Display,
|
|
||||||
PbReserve: pb,
|
|
||||||
},
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
r = append(r, &msg.Elem{
|
r = append(r, &msg.Elem{
|
||||||
Text: &msg.Text{
|
Text: &msg.Text{
|
||||||
Str: &e.Display,
|
Str: &e.Display,
|
||||||
@ -82,6 +75,14 @@ func (e *AtElement) Pack() (r []*msg.Elem) {
|
|||||||
}),
|
}),
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
case AtTypeGuildMember:
|
||||||
|
pb, _ := proto.Marshal(&msg.TextResvAttr{AtType: proto.Uint32(2), AtMemberTinyid: proto.Uint64(uint64(e.Target))})
|
||||||
|
r = append(r, &msg.Elem{
|
||||||
|
Text: &msg.Text{
|
||||||
|
Str: &e.Display,
|
||||||
|
PbReserve: pb,
|
||||||
|
},
|
||||||
|
})
|
||||||
}
|
}
|
||||||
r = append(r, &msg.Elem{Text: &msg.Text{Str: proto.String(" ")}})
|
r = append(r, &msg.Elem{Text: &msg.Text{Str: proto.String(" ")}})
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user