diff --git a/coolq/bot.go b/coolq/bot.go index 504fb9f..585b0f7 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -31,11 +31,11 @@ var json = jsoniter.ConfigCompatibleWithStandardLibrary type CQBot struct { Client *client.QQClient - events []func(*bytes.Buffer) - db *leveldb.DB - friendReqCache sync.Map - tempMsgCache sync.Map - oneWayMsgCache sync.Map + events []func(*bytes.Buffer) + db *leveldb.DB + friendReqCache sync.Map + tempSessionCache sync.Map + oneWayMsgCache sync.Map } // MSG 消息Map @@ -306,22 +306,24 @@ func (bot *CQBot) SendPrivateMessage(target int64, groupID int64, m *message.Sen if msg != nil { id = bot.InsertPrivateMessage(msg) } - } else if code, ok := bot.tempMsgCache.Load(target); ok || groupID != 0 { // 临时会话 + } else if session, ok := bot.tempSessionCache.Load(target); ok || groupID != 0 { // 临时会话 switch { case groupID != 0 && bot.Client.FindGroup(groupID) == nil: log.Errorf("错误: 找不到群(%v)", groupID) - id = -1 case groupID != 0 && !bot.Client.FindGroup(groupID).AdministratorOrOwner(): log.Errorf("错误: 机器人在群(%v) 为非管理员或群主, 无法主动发起临时会话", groupID) - id = -1 case groupID != 0 && bot.Client.FindGroup(groupID).FindMember(target) == nil: log.Errorf("错误: 群员(%v) 不在 群(%v), 无法发起临时会话", target, groupID) - id = -1 default: - if code != nil && groupID == 0 { - groupID = code.(int64) + if session == nil && groupID != 0 { + bot.Client.SendGroupTempMessage(groupID, target, m) + break + } + msg, err := session.(*client.TempSessionInfo).SendMessage(m) + if err != nil { + log.Errorf("发送临时会话消息失败: %v", err) + break } - msg := bot.Client.SendTempMessage(groupID, target, m) if msg != nil { id = bot.InsertTempMessage(target, msg) } diff --git a/coolq/event.go b/coolq/event.go index cf8605f..18e29c3 100644 --- a/coolq/event.go +++ b/coolq/event.go @@ -103,10 +103,11 @@ func (bot *CQBot) groupMessageEvent(c *client.QQClient, m *message.GroupMessage) bot.dispatchEventMessage(gm) } -func (bot *CQBot) tempMessageEvent(c *client.QQClient, m *message.TempMessage) { +func (bot *CQBot) tempMessageEvent(c *client.QQClient, e *client.TempMessageEvent) { + m := e.Message bot.checkMedia(m.Elements) cqm := ToStringMessage(m.Elements, m.Sender.Uin, true) - bot.tempMsgCache.Store(m.Sender.Uin, m.GroupCode) + bot.tempSessionCache.Store(m.Sender.Uin, e.Session) id := m.Id if bot.db != nil { id = bot.InsertTempMessage(m.Sender.Uin, m) @@ -384,7 +385,7 @@ func (bot *CQBot) friendRequestEvent(c *client.QQClient, e *client.NewFriendRequ func (bot *CQBot) friendAddedEvent(c *client.QQClient, e *client.NewFriendEvent) { log.Infof("添加了新好友: %v(%v)", e.Friend.Nickname, e.Friend.Uin) - bot.tempMsgCache.Delete(e.Friend.Uin) + bot.tempSessionCache.Delete(e.Friend.Uin) bot.dispatchEventMessage(MSG{ "post_type": "notice", "notice_type": "friend_add", diff --git a/go.mod b/go.mod index ee96991..8c94101 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f - github.com/Mrs4s/MiraiGo v0.0.0-20210404081916-0346596c7196 + github.com/Mrs4s/MiraiGo v0.0.0-20210406093140-5ec6c651b797 github.com/dustin/go-humanize v1.0.0 github.com/gin-gonic/gin v1.6.3 github.com/gorilla/websocket v1.4.2 @@ -25,7 +25,6 @@ require ( github.com/wdvxdr1123/go-silk v0.0.0-20210316130616-d47b553def60 github.com/willf/bitset v1.1.11 // indirect golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 - golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb // indirect golang.org/x/term v0.0.0-20210317153231-de623e64d2a6 golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c diff --git a/go.sum b/go.sum index 9bb2722..092bb6a 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f h1:2dk3eOnYllh+wUOuDhOoC2vUVoJF/5z478ryJ+wzEII= github.com/Baozisoftware/qrcode-terminal-go v0.0.0-20170407111555-c0650d8dff0f/go.mod h1:4a58ifQTEe2uwwsaqbh3i2un5/CBPg+At/qHpt18Tmk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Mrs4s/MiraiGo v0.0.0-20210404081916-0346596c7196 h1:EOVN6zaL3jpN311dCEBcZA7TvpNw0f0Ok9EgstmqkHs= -github.com/Mrs4s/MiraiGo v0.0.0-20210404081916-0346596c7196/go.mod h1:NjiWhlvGxwv1ftOWIoiFa/OzklnAYI4YqNexFOKSZKw= +github.com/Mrs4s/MiraiGo v0.0.0-20210406093140-5ec6c651b797 h1:u6jJ6bbYghAEM1DVe0SQKoIVva6od7fsdFRRC15DKMw= +github.com/Mrs4s/MiraiGo v0.0.0-20210406093140-5ec6c651b797/go.mod h1:NjiWhlvGxwv1ftOWIoiFa/OzklnAYI4YqNexFOKSZKw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -134,8 +134,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb h1:fqpd0EBDzlHRCjiphRR5Zo/RSWWQlWv34418dnEixWk= -golang.org/x/image v0.0.0-20210220032944-ac19c3e999fb/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=