From 626de1cb1744b5c936fcb7ee7caa46e15969cb7c Mon Sep 17 00:00:00 2001 From: Sam Date: Fri, 5 Mar 2021 17:34:21 +0800 Subject: [PATCH] Closes #556 --- coolq/api.go | 8 ++++---- coolq/bot.go | 27 ++++++++++++++++++++++----- coolq/event.go | 2 +- server/api.go | 10 +++++----- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/coolq/api.go b/coolq/api.go index 407dc23..2f29268 100644 --- a/coolq/api.go +++ b/coolq/api.go @@ -438,12 +438,12 @@ func (bot *CQBot) CQSendGroupForwardMessage(groupID int64, m gjson.Result) MSG { // CQSendPrivateMessage 发送私聊消息 // // https://git.io/Jtz1l -func (bot *CQBot) CQSendPrivateMessage(userID int64, i interface{}, autoEscape bool) MSG { +func (bot *CQBot) CQSendPrivateMessage(userID int64, groupId int64, i interface{}, autoEscape bool) MSG { var str string if m, ok := i.(gjson.Result); ok { if m.Type == gjson.JSON { elem := bot.ConvertObjectMessage(m, false) - mid := bot.SendPrivateMessage(userID, &message.SendingMessage{Elements: elem}) + mid := bot.SendPrivateMessage(userID, groupId, &message.SendingMessage{Elements: elem}) if mid == -1 { return Failed(100, "SEND_MSG_API_ERROR", "请参考输出") } @@ -468,7 +468,7 @@ func (bot *CQBot) CQSendPrivateMessage(userID int64, i interface{}, autoEscape b } else { elem = bot.ConvertStringMessage(str, false) } - mid := bot.SendPrivateMessage(userID, &message.SendingMessage{Elements: elem}) + mid := bot.SendPrivateMessage(userID, groupId, &message.SendingMessage{Elements: elem}) if mid == -1 { return Failed(100, "SEND_MSG_API_ERROR", "请参考输出") } @@ -874,7 +874,7 @@ func (bot *CQBot) CQHandleQuickOperation(context, operation gjson.Result) MSG { bot.CQSendGroupMessage(context.Get("group_id").Int(), reply, autoEscape) } if msgType == "private" { - bot.CQSendPrivateMessage(context.Get("user_id").Int(), reply, autoEscape) + bot.CQSendPrivateMessage(context.Get("user_id").Int(), context.Get("group_id").Int(), reply, autoEscape) } } if msgType == "group" { diff --git a/coolq/bot.go b/coolq/bot.go index fef5bca..829eec9 100644 --- a/coolq/bot.go +++ b/coolq/bot.go @@ -240,7 +240,7 @@ func (bot *CQBot) SendGroupMessage(groupID int64, m *message.SendingMessage) int } // SendPrivateMessage 发送私聊消息 -func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) int32 { +func (bot *CQBot) SendPrivateMessage(target int64, groupId int64, m *message.SendingMessage) int32 { var newElem []message.IMessageElement for _, elem := range m.Elements { if i, ok := elem.(*LocalImageElement); ok { @@ -292,16 +292,33 @@ func (bot *CQBot) SendPrivateMessage(target int64, m *message.SendingMessage) in if msg != nil { id = bot.InsertPrivateMessage(msg) } - } else if code, ok := bot.tempMsgCache.Load(target); ok { // 临时会话 - msg := bot.Client.SendTempMessage(code.(int64), target, m) - if msg != nil { - id = bot.InsertTempMessage(target, msg) + } else if code, ok := bot.tempMsgCache.Load(target); ok || groupId != 0 { // 临时会话 + if groupId != 0 && !bot.Client.FindGroup(groupId).AdministratorOrOwner() { + log.Errorf("错误: 机器人在群(%v) 为非管理员或群主, 无法主动发起临时会话", groupId) + id = -1 + } else if groupId != 0 && bot.Client.FindGroup(groupId).FindMember(target) == nil { + log.Errorf("错误: 群员(%v) 不在 群(%v), 无法发起临时会话", target, groupId) + id = -1 + } else { + if code != nil { + groupId = code.(int64) + } + msg := bot.Client.SendTempMessage(groupId, target, m) + if msg != nil { + id = bot.InsertTempMessage(target, msg) + } } } else if _, ok := bot.oneWayMsgCache.Load(target); ok { // 单向好友 msg := bot.Client.SendPrivateMessage(target, m) if msg != nil { id = bot.InsertPrivateMessage(msg) } + } else { + nickname := "Unknown" + if summaryInfo, _ := bot.Client.GetSummaryInfo(target); summaryInfo != nil { + nickname = summaryInfo.Nickname + } + log.Errorf("错误: 请先添加 %v(%v) 为好友", nickname, target) } if id == -1 { return -1 diff --git a/coolq/event.go b/coolq/event.go index 00bc66f..81292cd 100644 --- a/coolq/event.go +++ b/coolq/event.go @@ -123,7 +123,7 @@ func (bot *CQBot) tempMessageEvent(c *client.QQClient, m *message.TempMessage) { "time": time.Now().Unix(), "sender": MSG{ "user_id": m.Sender.Uin, - "group_id": m.GroupCode, + "group_id": m.GroupCode, "nickname": m.Sender.Nickname, "sex": "unknown", "age": 0, diff --git a/server/api.go b/server/api.go index a6324b6..eb3a615 100644 --- a/server/api.go +++ b/server/api.go @@ -45,17 +45,17 @@ func getGroupMemberInfo(bot *coolq.CQBot, p resultGetter) coolq.MSG { func sendMSG(bot *coolq.CQBot, p resultGetter) coolq.MSG { autoEscape := global.EnsureBool(p.Get("auto_escape"), false) if p.Get("message_type").Str == "private" { - return bot.CQSendPrivateMessage(p.Get("user_id").Int(), p.Get("message"), autoEscape) + return bot.CQSendPrivateMessage(p.Get("user_id").Int(), p.Get("group_id").Int(), p.Get("message"), autoEscape) } if p.Get("message_type").Str == "group" { return bot.CQSendGroupMessage(p.Get("group_id").Int(), p.Get("message"), autoEscape) } + if p.Get("user_id").Int() != 0 { + return bot.CQSendPrivateMessage(p.Get("user_id").Int(), p.Get("group_id").Int(), p.Get("message"), autoEscape) + } if p.Get("group_id").Int() != 0 { return bot.CQSendGroupMessage(p.Get("group_id").Int(), p.Get("message"), autoEscape) } - if p.Get("user_id").Int() != 0 { - return bot.CQSendPrivateMessage(p.Get("user_id").Int(), p.Get("message"), autoEscape) - } return coolq.MSG{} } @@ -69,7 +69,7 @@ func sendGroupForwardMSG(bot *coolq.CQBot, p resultGetter) coolq.MSG { } func sendPrivateMSG(bot *coolq.CQBot, p resultGetter) coolq.MSG { - return bot.CQSendPrivateMessage(p.Get("user_id").Int(), p.Get("message"), + return bot.CQSendPrivateMessage(p.Get("user_id").Int(), p.Get("group_id").Int(), p.Get("message"), global.EnsureBool(p.Get("auto_escape"), false)) }