-
Notifications
You must be signed in to change notification settings - Fork 9
/
intf_message.go
129 lines (112 loc) · 3.49 KB
/
intf_message.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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// 接口定义 - 消息接口
package libonebot
// 消息段
// https://12.onebot.dev/interface/message/segments/
// SegTypeXxx 表示 OneBot 标准定义的消息段类型.
const (
SegTypeText = "text" // 纯文本消息段
SegTypeMention = "mention" // 提及 (即 @) 消息段
SegTypeMentionAll = "mention_all" // 提及所有人消息段
SegTypeImage = "image" // 图片消息段
SegTypeVoice = "voice" // 语音消息段
SegTypeAudio = "audio" // 音频消息段
SegTypeVideo = "video" // 视频消息段
SegTypeFile = "file" // 文件消息段
SegTypeLocation = "location" // 位置消息段
SegTypeReply = "reply" // 回复消息段
)
func (s *Segment) tryMerge(next Segment) bool {
switch s.Type {
case SegTypeText:
if next.Type == SegTypeText {
text1, err1 := s.Data.GetString("text")
text2, err2 := next.Data.GetString("text")
if err1 != nil && err2 == nil {
s.Data.Set("text", text2)
} else if err1 == nil && err2 != nil {
s.Data.Set("text", text1)
} else if err1 == nil && err2 == nil {
s.Data.Set("text", text1+text2)
} else {
s.Data.Set("text", "")
}
return true
}
}
return false
}
// CustomSegment 构造一个指定类型的消息段.
func CustomSegment(type_ string, data map[string]interface{}) Segment {
return Segment{
Type: type_,
Data: EasierMapFromMap(data),
}
}
// TextSegment 构造一个纯文本消息段.
func TextSegment(text string) Segment {
return CustomSegment(SegTypeText, map[string]interface{}{
"text": text,
})
}
// MentionSegment 构造一个提及消息段.
func MentionSegment(userID string) Segment {
return CustomSegment(SegTypeMention, map[string]interface{}{
"user_id": userID,
})
}
// MentionAllSegment 构造一个提及所有人消息段.
func MentionAllSegment() Segment {
return CustomSegment(SegTypeMentionAll, map[string]interface{}{})
}
// ImageSegment 构造一个图片消息段.
func ImageSegment(fileID string) Segment {
return CustomSegment(SegTypeImage, map[string]interface{}{
"file_id": fileID,
})
}
// VoiceSegment 构造一个语音消息段.
func VoiceSegment(fileID string) Segment {
return CustomSegment(SegTypeVoice, map[string]interface{}{
"file_id": fileID,
})
}
// AudioSegment 构造一个音频消息段.
func AudioSegment(fileID string) Segment {
return CustomSegment(SegTypeAudio, map[string]interface{}{
"file_id": fileID,
})
}
// VideoSegment 构造一个视频消息段.
func VideoSegment(fileID string) Segment {
return CustomSegment(SegTypeVideo, map[string]interface{}{
"file_id": fileID,
})
}
// FileSegment 构造一个文件消息段.
func FileSegment(fileID string) Segment {
return CustomSegment(SegTypeFile, map[string]interface{}{
"file_id": fileID,
})
}
// LocationSegment 构造一个位置消息段.
func LocationSegment(latitude float64, longitude float64, title string, content string) Segment {
return CustomSegment(SegTypeLocation, map[string]interface{}{
"latitude": latitude,
"longitude": longitude,
"title": title,
"content": content,
})
}
// ReplySegment 构造一个回复消息段.
func ReplySegment(messageID string, userID string) Segment {
return CustomSegment(SegTypeReply, map[string]interface{}{
"message_id": messageID,
"user_id": userID,
})
}
// 消息动作
// https://12.onebot.dev/interface/message/actions/
const (
ActionSendMessage = "send_message" // 发送消息
ActionDeleteMessage = "delete_message" // 删除消息
)