Skip to content

Commit

Permalink
report offline file
Browse files Browse the repository at this point in the history
  • Loading branch information
lz1998 committed Oct 22, 2020
1 parent 74b4d70 commit fa12ff4
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 1 deletion.
18 changes: 18 additions & 0 deletions pkg/plugin/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ type (
GroupMessageRecalledPlugin = func(*client.QQClient, *client.GroupMessageRecalledEvent) int32
FriendMessageRecalledPlugin = func(*client.QQClient, *client.FriendMessageRecalledEvent) int32
NewFriendAddedPlugin = func(*client.QQClient, *client.NewFriendEvent) int32
OfflineFilePlugin = func(*client.QQClient, *client.OfflineFileEvent) int32
)

const (
Expand All @@ -40,6 +41,7 @@ var GroupInvitedRequestPluginList = make([]GroupInvitedRequestPlugin, 0)
var GroupMessageRecalledPluginList = make([]GroupMessageRecalledPlugin, 0)
var FriendMessageRecalledPluginList = make([]FriendMessageRecalledPlugin, 0)
var NewFriendAddedPluginList = make([]NewFriendAddedPlugin, 0)
var OfflineFilePluginList = make([]OfflineFilePlugin, 0)

func Serve(cli *client.QQClient) {
cli.OnPrivateMessage(handlePrivateMessage)
Expand All @@ -55,6 +57,7 @@ func Serve(cli *client.QQClient) {
cli.OnGroupMessageRecalled(handleGroupMessageRecalled)
cli.OnFriendMessageRecalled(handleFriendMessageRecalled)
cli.OnNewFriendAdded(handleNewFriendAdded)
cli.OnReceivedOfflineFile(handleOfflineFile)
}

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

// 添加离线文件处理插件
func AddOfflineFilePlugin(plugin OfflineFilePlugin) {
OfflineFilePluginList = append(OfflineFilePluginList, plugin)
}

func handlePrivateMessage(cli *client.QQClient, event *message.PrivateMessage) {
SafeGo(func() {
for _, plugin := range PrivateMessagePluginList {
Expand Down Expand Up @@ -252,6 +260,16 @@ func handleNewFriendAdded(cli *client.QQClient, event *client.NewFriendEvent) {
})
}

func handleOfflineFile(cli *client.QQClient, event *client.OfflineFileEvent) {
SafeGo(func() {
for _, plugin := range OfflineFilePluginList {
if result := plugin(cli, event); result == MessageBlock {
break
}
}
})
}

func SafeGo(fn func()) {
go func() {
defer func() {
Expand Down
2 changes: 1 addition & 1 deletion service/bot/remote.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ func ping(cli *client.QQClient, conn *websocket.Conn) {
}
time.Sleep(10 * time.Second)
}
log.Warnf("websocket 连续ping失败5次,断开连接")
log.Errorf("websocket 连续ping失败5次,断开连接")
_ = conn.Close()
ConnectUniversal(cli)
}
Expand Down
1 change: 1 addition & 0 deletions service/handler/bot.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ func CreateBotImpl(uin int64, password string) {
plugin.AddGroupMessageRecalledPlugin(plugins.ReportGroupMessageRecalled)
plugin.AddFriendMessageRecalledPlugin(plugins.ReportFriendMessageRecalled)
plugin.AddNewFriendAddedPlugin(plugins.ReportNewFriendAdded)
plugin.AddOfflineFilePlugin(plugins.ReportOfflineFile)

plugin.Serve(bot.Cli)
log.Infof("插件加载完成")
Expand Down
36 changes: 36 additions & 0 deletions service/plugins/report.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package plugins

import (
"fmt"
"html"
"strconv"
"time"

Expand Down Expand Up @@ -338,3 +340,37 @@ func ReportNewFriendAdded(cli *client.QQClient, event *client.NewFriendEvent) in
bot.HandleEventFrame(cli, eventProto)
return plugin.MessageIgnore
}

// 暂时先放在私聊里面吧,onebot协议里面没这个
func ReportOfflineFile(cli *client.QQClient, event *client.OfflineFileEvent) int32 {
eventProto := &onebot.Frame{
FrameType: onebot.Frame_TPrivateMessageEvent,
}
eventProto.Data = &onebot.Frame_PrivateMessageEvent{
PrivateMessageEvent: &onebot.PrivateMessageEvent{
Time: time.Now().Unix(),
SelfId: cli.Uin,
PostType: "message",
MessageType: "private",
SubType: "normal",
MessageId: 0,
UserId: event.Sender,
Message: []*onebot.Message{
{
Type: "file",
Data: map[string]string{
"url": event.DownloadUrl,
"name": event.FileName,
"size": strconv.FormatInt(event.FileSize, 10),
},
},
},
RawMessage: fmt.Sprintf(`<file url="%s" name="%s" size="%d"/>`, html.EscapeString(event.DownloadUrl), html.EscapeString(event.FileName), event.FileSize),
Sender: &onebot.PrivateMessageEvent_Sender{
UserId: event.Sender,
},
},
}
bot.HandleEventFrame(cli, eventProto)
return plugin.MessageIgnore
}

0 comments on commit fa12ff4

Please sign in to comment.