forked from Mrs4s/MiraiGo
/
notify.go
113 lines (102 loc) · 2.82 KB
/
notify.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
package client
import (
"fmt"
"github.com/myxtype/MiraiGo/client/pb/notify"
"strconv"
)
type (
// GroupPokeNotifyEvent 群内戳一戳提示事件
GroupPokeNotifyEvent struct {
GroupCode int64
Sender int64
Receiver int64
}
// GroupRedBagLuckyKingNotifyEvent 群内抢红包运气王提示事件
GroupRedBagLuckyKingNotifyEvent struct {
GroupCode int64
Sender int64
LuckyKing int64
}
// MemberHonorChangedNotifyEvent 群成员荣誉变更提示事件
MemberHonorChangedNotifyEvent struct {
GroupCode int64
Honor HonorType
Uin int64
Nick string
}
)
// grayTipProcessor 提取出来专门用于处理群内 notify tips
func (c *QQClient) grayTipProcessor(groupId int64, tipInfo *notify.GeneralGrayTipInfo) {
switch tipInfo.TemplId {
case 10043, 1136: // 戳一戳
var sender int64 = 0
receiver := c.Uin
for _, templ := range tipInfo.MsgTemplParam {
if templ.Name == "uin_str1" {
sender, _ = strconv.ParseInt(templ.Value, 10, 64)
}
if templ.Name == "uin_str2" {
receiver, _ = strconv.ParseInt(templ.Value, 10, 64)
}
}
c.dispatchGroupNotifyEvent(&GroupPokeNotifyEvent{
GroupCode: groupId,
Sender: sender,
Receiver: receiver,
})
case 1052, 1053, 1054, 1067: // 群荣誉
var nick string
var uin int64
for _, templ := range tipInfo.MsgTemplParam {
if templ.Name == "nick" {
nick = templ.Value
}
if templ.Name == "uin" {
uin, _ = strconv.ParseInt(templ.Value, 10, 64)
}
}
c.dispatchGroupNotifyEvent(&MemberHonorChangedNotifyEvent{
GroupCode: groupId,
Honor: func() HonorType {
switch tipInfo.TemplId {
case 1052:
return Performer
case 1053, 1054:
return Talkative
case 1067:
return Emotion
default:
return 0
}
}(),
Uin: uin,
Nick: nick,
})
}
}
func (e *GroupPokeNotifyEvent) From() int64 {
return e.GroupCode
}
func (e *GroupPokeNotifyEvent) Content() string {
return fmt.Sprintf("%d戳了戳%d", e.Sender, e.Receiver)
}
func (e *GroupRedBagLuckyKingNotifyEvent) From() int64 {
return e.GroupCode
}
func (e *GroupRedBagLuckyKingNotifyEvent) Content() string {
return fmt.Sprintf("%d发的红包被领完, %d是运气王", e.Sender, e.LuckyKing)
}
func (e *MemberHonorChangedNotifyEvent) From() int64 {
return e.GroupCode
}
func (e *MemberHonorChangedNotifyEvent) Content() string {
switch e.Honor {
case Talkative:
return fmt.Sprintf("昨日 %s(%d) 在群 %d 内发言最积极, 获得 龙王 标识。", e.Nick, e.Uin, e.GroupCode)
case Performer:
return fmt.Sprintf("%s(%d) 在群 %d 里连续发消息超过7天, 获得 群聊之火 标识。", e.Nick, e.Uin, e.GroupCode)
case Emotion:
return fmt.Sprintf("%s(%d) 在群聊 %d 中连续发表情包超过3天,且累计数量超过20条,获得 快乐源泉 标识。", e.Nick, e.Uin, e.GroupCode)
}
return "ERROR"
}