From 4a88413127594d1c780e77eb9f0abf0fca4cd11f Mon Sep 17 00:00:00 2001 From: SanaeFox <36219542+Hoshinonyaruko@users.noreply.github.com> Date: Sun, 21 Jan 2024 11:56:27 +0800 Subject: [PATCH] Beta136 (#311) * beta122 * beta123 * beta124 * beta124 * beta124 * beta127 * beta128 * beta129 * beta130 * beta131 * beta132 * beta133 * beta134 * beta135 * beta136 --- Processor/ProcessGroupMessage.go | 3 +- Processor/ProcessGuildATMessage.go | 6 ++-- Processor/ProcessGuildNormalMessage.go | 6 ++-- echo/messageidmap.go | 42 ++++++++++++++++++++++++++ handlers/send_group_msg.go | 3 +- 5 files changed, 54 insertions(+), 6 deletions(-) diff --git a/Processor/ProcessGroupMessage.go b/Processor/ProcessGroupMessage.go index 91ece57a..7ede3832 100644 --- a/Processor/ProcessGroupMessage.go +++ b/Processor/ProcessGroupMessage.go @@ -170,7 +170,8 @@ func (p *Processors) ProcessGroupMessage(data *dto.WSGroupATMessageData) error { //懒message_id池 echo.AddLazyMessageId(strconv.FormatInt(GroupID64, 10), data.ID, time.Now()) //懒message_id池 - echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + echo.AddLazyMessageIdv2(strconv.FormatInt(GroupID64, 10), strconv.FormatInt(userid64, 10), data.ID, time.Now()) // 调试 PrintStructWithFieldNames(groupMsg) diff --git a/Processor/ProcessGuildATMessage.go b/Processor/ProcessGuildATMessage.go index 6bd646d8..1ccf0bdb 100644 --- a/Processor/ProcessGuildATMessage.go +++ b/Processor/ProcessGuildATMessage.go @@ -112,7 +112,8 @@ func (p *Processors) ProcessGuildATMessage(data *dto.WSATMessageData) error { //懒message_id池 echo.AddLazyMessageId(data.ChannelID, data.ID, time.Now()) //懒message_id池 - echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageIdv2(data.ChannelID, strconv.FormatInt(userid64, 10), data.ID, time.Now()) //调试 PrintStructWithFieldNames(onebotMsg) @@ -267,7 +268,8 @@ func (p *Processors) ProcessGuildATMessage(data *dto.WSATMessageData) error { //懒message_id池 echo.AddLazyMessageId(strconv.FormatInt(ChannelID64, 10), data.ID, time.Now()) //懒message_id池 - echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageIdv2(strconv.FormatInt(ChannelID64, 10), strconv.FormatInt(userid64, 10), data.ID, time.Now()) //调试 PrintStructWithFieldNames(groupMsg) diff --git a/Processor/ProcessGuildNormalMessage.go b/Processor/ProcessGuildNormalMessage.go index 1c280e7e..06a787aa 100644 --- a/Processor/ProcessGuildNormalMessage.go +++ b/Processor/ProcessGuildNormalMessage.go @@ -112,7 +112,8 @@ func (p *Processors) ProcessGuildNormalMessage(data *dto.WSMessageData) error { //懒message_id池 echo.AddLazyMessageId(data.ChannelID, data.ID, time.Now()) //懒message_id池 - echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageIdv2(data.ChannelID, strconv.FormatInt(userid64, 10), data.ID, time.Now()) //调试 PrintStructWithFieldNames(onebotMsg) @@ -275,7 +276,8 @@ func (p *Processors) ProcessGuildNormalMessage(data *dto.WSMessageData) error { //懒message_id池 echo.AddLazyMessageId(strconv.FormatInt(ChannelID64, 10), data.ID, time.Now()) //懒message_id池 - echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageId(strconv.FormatInt(userid64, 10), data.ID, time.Now()) + //echo.AddLazyMessageIdv2(strconv.FormatInt(ChannelID64, 10), strconv.FormatInt(userid64, 10), data.ID, time.Now()) //调试 PrintStructWithFieldNames(groupMsg) diff --git a/echo/messageidmap.go b/echo/messageidmap.go index 7aff931b..9fdaf0e7 100644 --- a/echo/messageidmap.go +++ b/echo/messageidmap.go @@ -41,6 +41,15 @@ func AddLazyMessageId(groupID, messageID string, timestamp time.Time) { store.records[groupID] = append(store.records[groupID], messageRecord{messageID: messageID, timestamp: timestamp}) } +// AddLazyMessageId 添加 message_id 和它的时间戳到指定群号 +func AddLazyMessageIdv2(groupID, userID, messageID string, timestamp time.Time) { + store := initInstance() + store.mu.Lock() + defer store.mu.Unlock() + key := groupID + "." + userID + store.records[key] = append(store.records[key], messageRecord{messageID: messageID, timestamp: timestamp}) +} + // GetRecentMessages 获取指定群号中最近5分钟内的 message_id func GetLazyMessagesId(groupID string) string { store := initInstance() @@ -69,6 +78,39 @@ func GetLazyMessagesId(groupID string) string { return randomMessageID } +// GetLazyMessagesIdv2 获取指定群号和用户ID中最近5分钟内的 message_id +func GetLazyMessagesIdv2(groupID, userID string) string { + store := initInstance() + store.mu.RLock() + defer store.mu.RUnlock() + + // 构建复合键 + key := groupID + "." + userID + + fiveMinutesAgo := time.Now().Add(-5 * time.Minute) + var recentMessages []string + for _, record := range store.records[key] { + if record.timestamp.After(fiveMinutesAgo) { + recentMessages = append(recentMessages, record.messageID) + } + } + + var randomMessageID string + if len(recentMessages) > 0 { + randomIndex := rand.Intn(len(recentMessages)) + randomMessageID = recentMessages[randomIndex] + } else { + // 如果没有找到最近消息,处理默认行为 + msgType := GetMessageTypeByGroupidv2(config.GetAppIDStr(), groupID) + if strings.HasPrefix(msgType, "guild") { + randomMessageID = "1000" // 频道主动信息 + } else { + randomMessageID = "" + } + } + return randomMessageID +} + // 通过group_id获取类型 func GetMessageTypeByGroupidv2(appID string, GroupID interface{}) string { // 从appID和userID生成key diff --git a/handlers/send_group_msg.go b/handlers/send_group_msg.go index 8cb024a1..8e97f1d4 100644 --- a/handlers/send_group_msg.go +++ b/handlers/send_group_msg.go @@ -87,7 +87,8 @@ func HandleSendGroupMsg(client callapi.Client, api openapi.OpenAPI, apiv2 openap mylog.Printf("GetLazyMessagesId: %v", messageID) //如果应用端传递了user_id 就让at不要顺序乱套 if message.Params.UserID != nil { - messageID = echo.GetLazyMessagesId(message.Params.UserID.(string)) + //messageID = echo.GetLazyMessagesId(message.Params.UserID.(string)) + messageID = echo.GetLazyMessagesIdv2(message.Params.GroupID.(string), message.Params.UserID.(string)) mylog.Printf("GetLazyMessagesIdv2: %v", messageID) } if messageID != "" {