Skip to content

Commit 7e3986c

Browse files
committed
report offline file
1 parent 74b4d70 commit 7e3986c

File tree

6 files changed

+67
-5
lines changed

6 files changed

+67
-5
lines changed

pkg/plugin/plugin.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ type (
2020
GroupMessageRecalledPlugin = func(*client.QQClient, *client.GroupMessageRecalledEvent) int32
2121
FriendMessageRecalledPlugin = func(*client.QQClient, *client.FriendMessageRecalledEvent) int32
2222
NewFriendAddedPlugin = func(*client.QQClient, *client.NewFriendEvent) int32
23+
OfflineFilePlugin = func(*client.QQClient, *client.OfflineFileEvent) int32
2324
)
2425

2526
const (
@@ -40,6 +41,7 @@ var GroupInvitedRequestPluginList = make([]GroupInvitedRequestPlugin, 0)
4041
var GroupMessageRecalledPluginList = make([]GroupMessageRecalledPlugin, 0)
4142
var FriendMessageRecalledPluginList = make([]FriendMessageRecalledPlugin, 0)
4243
var NewFriendAddedPluginList = make([]NewFriendAddedPlugin, 0)
44+
var OfflineFilePluginList = make([]OfflineFilePlugin, 0)
4345

4446
func Serve(cli *client.QQClient) {
4547
cli.OnPrivateMessage(handlePrivateMessage)
@@ -55,6 +57,7 @@ func Serve(cli *client.QQClient) {
5557
cli.OnGroupMessageRecalled(handleGroupMessageRecalled)
5658
cli.OnFriendMessageRecalled(handleFriendMessageRecalled)
5759
cli.OnNewFriendAdded(handleNewFriendAdded)
60+
cli.OnReceivedOfflineFile(handleOfflineFile)
5861
}
5962

6063
// 添加私聊消息插件
@@ -122,6 +125,11 @@ func AddNewFriendAddedPlugin(plugin NewFriendAddedPlugin) {
122125
NewFriendAddedPluginList = append(NewFriendAddedPluginList, plugin)
123126
}
124127

128+
// 添加离线文件处理插件
129+
func AddOfflineFilePlugin(plugin OfflineFilePlugin) {
130+
OfflineFilePluginList = append(OfflineFilePluginList, plugin)
131+
}
132+
125133
func handlePrivateMessage(cli *client.QQClient, event *message.PrivateMessage) {
126134
SafeGo(func() {
127135
for _, plugin := range PrivateMessagePluginList {
@@ -252,6 +260,16 @@ func handleNewFriendAdded(cli *client.QQClient, event *client.NewFriendEvent) {
252260
})
253261
}
254262

263+
func handleOfflineFile(cli *client.QQClient, event *client.OfflineFileEvent) {
264+
SafeGo(func() {
265+
for _, plugin := range OfflineFilePluginList {
266+
if result := plugin(cli, event); result == MessageBlock {
267+
break
268+
}
269+
}
270+
})
271+
}
272+
255273
func SafeGo(fn func()) {
256274
go func() {
257275
defer func() {

service/bot/proto2mirai.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ func ProtoMsgToMiraiMsg(msgList []*onebot.Message, notConvertText bool) []messag
3333
messageChain = append(messageChain, ProtoAtToMiraiAt(protoMsg.Data))
3434
case "image":
3535
messageChain = append(messageChain, ProtoImageToMiraiImage(protoMsg.Data))
36+
case "img":
37+
messageChain = append(messageChain, ProtoImageToMiraiImage(protoMsg.Data))
3638
case "record":
3739
messageChain = append(messageChain, ProtoVoiceToMiraiVoice(protoMsg.Data))
3840
case "face":
@@ -56,9 +58,12 @@ func ProtoTextToMiraiText(data map[string]string) message.IMessageElement {
5658
}
5759

5860
func ProtoImageToMiraiImage(data map[string]string) message.IMessageElement {
59-
url, ok := data["file"]
61+
url, ok := data["url"]
6062
if !ok {
61-
url, ok = data["url"]
63+
url, ok = data["src"] // TODO 为了兼容我的旧代码偷偷加的
64+
if !ok {
65+
url, ok = data["file"]
66+
}
6267
}
6368
if !ok {
6469
log.Warnf("imageUrl不存在")
@@ -73,9 +78,9 @@ func ProtoImageToMiraiImage(data map[string]string) message.IMessageElement {
7378
}
7479

7580
func ProtoVoiceToMiraiVoice(data map[string]string) message.IMessageElement {
76-
url, ok := data["file"]
81+
url, ok := data["url"]
7782
if !ok {
78-
url, ok = data["url"]
83+
url, ok = data["file"]
7984
}
8085
if !ok {
8186
log.Warnf("recordUrl不存在")

service/bot/raw2mirai.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ func RawMsgToMiraiMsg(str string) []message.IMessageElement {
4545
switch node.XMLName.Local {
4646
case "at":
4747
elemList = append(elemList, ProtoAtToMiraiAt(attrMap))
48+
case "img":
49+
elemList = append(elemList, ProtoImageToMiraiImage(attrMap)) // TODO 为了兼容我的旧代码偷偷加的
4850
case "image":
4951
elemList = append(elemList, ProtoImageToMiraiImage(attrMap))
5052
case "face":

service/bot/remote.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ func ping(cli *client.QQClient, conn *websocket.Conn) {
6565
}
6666
time.Sleep(10 * time.Second)
6767
}
68-
log.Warnf("websocket 连续ping失败5次,断开连接")
68+
log.Errorf("websocket 连续ping失败5次,断开连接")
6969
_ = conn.Close()
7070
ConnectUniversal(cli)
7171
}

service/handler/bot.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ func CreateBotImpl(uin int64, password string) {
144144
plugin.AddGroupMessageRecalledPlugin(plugins.ReportGroupMessageRecalled)
145145
plugin.AddFriendMessageRecalledPlugin(plugins.ReportFriendMessageRecalled)
146146
plugin.AddNewFriendAddedPlugin(plugins.ReportNewFriendAdded)
147+
plugin.AddOfflineFilePlugin(plugins.ReportOfflineFile)
147148

148149
plugin.Serve(bot.Cli)
149150
log.Infof("插件加载完成")

service/plugins/report.go

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package plugins
22

33
import (
4+
"fmt"
5+
"html"
46
"strconv"
57
"time"
68

@@ -338,3 +340,37 @@ func ReportNewFriendAdded(cli *client.QQClient, event *client.NewFriendEvent) in
338340
bot.HandleEventFrame(cli, eventProto)
339341
return plugin.MessageIgnore
340342
}
343+
344+
// 暂时先放在私聊里面吧,onebot协议里面没这个
345+
func ReportOfflineFile(cli *client.QQClient, event *client.OfflineFileEvent) int32 {
346+
eventProto := &onebot.Frame{
347+
FrameType: onebot.Frame_TPrivateMessageEvent,
348+
}
349+
eventProto.Data = &onebot.Frame_PrivateMessageEvent{
350+
PrivateMessageEvent: &onebot.PrivateMessageEvent{
351+
Time: time.Now().Unix(),
352+
SelfId: cli.Uin,
353+
PostType: "message",
354+
MessageType: "private",
355+
SubType: "normal",
356+
MessageId: 0,
357+
UserId: event.Sender,
358+
Message: []*onebot.Message{
359+
{
360+
Type: "file",
361+
Data: map[string]string{
362+
"url": event.DownloadUrl,
363+
"name": event.FileName,
364+
"size": strconv.FormatInt(event.FileSize, 10),
365+
},
366+
},
367+
},
368+
RawMessage: fmt.Sprintf(`<file url="%s" name="%s" size="%d"/>`, html.EscapeString(event.DownloadUrl), html.EscapeString(event.FileName), event.FileSize),
369+
Sender: &onebot.PrivateMessageEvent_Sender{
370+
UserId: event.Sender,
371+
},
372+
},
373+
}
374+
bot.HandleEventFrame(cli, eventProto)
375+
return plugin.MessageIgnore
376+
}

0 commit comments

Comments
 (0)