diff --git a/tasks/watergroup/month.go b/tasks/watergroup/month.go index bcd99d12..f3b8c81f 100644 --- a/tasks/watergroup/month.go +++ b/tasks/watergroup/month.go @@ -68,22 +68,36 @@ func dealMonth(gid string) { log.Printf("查询群成员总数失败, 错误信息: %v", err) } // 计算活跃度 - showActivity := err != nil && groupUsers > 0 + showActivity := err == nil && groupUsers > 0 activity := "0.00" if groupUsers > 0 { activity = fmt.Sprintf("%.2f", (float64(len(records))/float64(groupUsers))*100) } - // 计算消息总数 - var msgCount int64 - for _, v := range records { + // 计算消息总数、中位数、前十位消息总数 + var msgCount, medianCount, topTenCount int64 + for idx, v := range records { msgCount += v.Count + if idx == (len(records)/2)-1 { + medianCount = v.Count + } + if len(records) > 10 && idx < 10 { + topTenCount += v.Count + } } + // 计算活跃用户人均消息条数 + avgMsgCount := int(float64(msgCount) / float64(len(records))) + // 组装消息总数推送信息 notifyMsgs = append(notifyMsgs, " ") notifyMsgs = append(notifyMsgs, fmt.Sprintf("🗣️ %s本群 %d 位朋友共产生 %d 条发言", monthStr, len(records), msgCount)) if showActivity { - notifyMsgs = append(notifyMsgs, fmt.Sprintf("🎭 活跃度: %s%", activity)) + m := fmt.Sprintf("🎭 活跃度: %s%%,人均消息条数: %d,中位数: %d", activity, avgMsgCount, medianCount) + // 计算前十占比 + if topTenCount > 0 { + m += fmt.Sprintf(",前十名占比: %.2f%%", float64(topTenCount)/float64(msgCount)*100) + } + notifyMsgs = append(notifyMsgs, m) } notifyMsgs = append(notifyMsgs, "\n🏵 活跃用户排行榜 🏵") diff --git a/tasks/watergroup/week.go b/tasks/watergroup/week.go index 6598ca21..b4902c07 100644 --- a/tasks/watergroup/week.go +++ b/tasks/watergroup/week.go @@ -67,22 +67,36 @@ func dealWeek(gid string) { log.Printf("查询群成员总数失败, 错误信息: %v", err) } // 计算活跃度 - showActivity := err != nil && groupUsers > 0 + showActivity := err == nil && groupUsers > 0 activity := "0.00" if groupUsers > 0 { activity = fmt.Sprintf("%.2f", (float64(len(records))/float64(groupUsers))*100) } - // 计算消息总数 - var msgCount int64 - for _, v := range records { + // 计算消息总数、中位数、前十位消息总数 + var msgCount, medianCount, topTenCount int64 + for idx, v := range records { msgCount += v.Count + if idx == (len(records)/2)-1 { + medianCount = v.Count + } + if len(records) > 10 && idx < 10 { + topTenCount += v.Count + } } + // 计算活跃用户人均消息条数 + avgMsgCount := int(float64(msgCount) / float64(len(records))) + // 组装消息总数推送信息 notifyMsgs = append(notifyMsgs, " ") notifyMsgs = append(notifyMsgs, fmt.Sprintf("🗣️ 上周本群 %d 位朋友共产生 %d 条发言", len(records), msgCount)) if showActivity { - notifyMsgs = append(notifyMsgs, fmt.Sprintf("🎭 活跃度: %s%", activity)) + m := fmt.Sprintf("🎭 活跃度: %s%%,人均消息条数: %d,中位数: %d", activity, avgMsgCount, medianCount) + // 计算前十占比 + if topTenCount > 0 { + m += fmt.Sprintf(",前十名占比: %.2f%%", float64(topTenCount)/float64(msgCount)*100) + } + notifyMsgs = append(notifyMsgs, m) } notifyMsgs = append(notifyMsgs, "\n🏵 活跃用户排行榜 🏵") diff --git a/tasks/watergroup/year.go b/tasks/watergroup/year.go index 3d07bcfa..8ea50ba7 100644 --- a/tasks/watergroup/year.go +++ b/tasks/watergroup/year.go @@ -67,17 +67,26 @@ func dealYear(gid string) { log.Printf("查询群成员总数失败, 错误信息: %v", err) } // 计算活跃度 - showActivity := err != nil && groupUsers > 0 + showActivity := err == nil && groupUsers > 0 activity := "0.00" if groupUsers > 0 { activity = fmt.Sprintf("%.2f", (float64(len(records))/float64(groupUsers))*100) } - // 计算消息总数 - var msgCount int64 - for _, v := range records { + // 计算消息总数、中位数、前十位消息总数 + var msgCount, medianCount, topTenCount int64 + for idx, v := range records { msgCount += v.Count + if idx == (len(records)/2)-1 { + medianCount = v.Count + } + if len(records) > 10 && idx < 10 { + topTenCount += v.Count + } } + // 计算活跃用户人均消息条数 + avgMsgCount := int(float64(msgCount) / float64(len(records))) + // 组装消息总数推送信息 notifyMsgs = append(notifyMsgs, " ") notifyMsgs = append(notifyMsgs, "亲爱的群友们,新年已经悄悄来临,让我们一起迎接这充满希望和美好的时刻。在这个特殊的日子里,我要向你们致以最真挚的祝福。") @@ -90,7 +99,12 @@ func dealYear(gid string) { notifyMsgs = append(notifyMsgs, " ") notifyMsgs = append(notifyMsgs, fmt.Sprintf("🗣️ 去年本群 %d 位朋友共产生 %d 条发言", len(records), msgCount)) if showActivity { - notifyMsgs = append(notifyMsgs, fmt.Sprintf("🎭 活跃度: %s%", activity)) + m := fmt.Sprintf("🎭 活跃度: %s%%,人均消息条数: %d,中位数: %d", activity, avgMsgCount, medianCount) + // 计算前十占比 + if topTenCount > 0 { + m += fmt.Sprintf(",前十名占比: %.2f%%", float64(topTenCount)/float64(msgCount)*100) + } + notifyMsgs = append(notifyMsgs, m) } notifyMsgs = append(notifyMsgs, "\n🏵 活跃用户排行榜 🏵") diff --git a/tasks/watergroup/yesterday.go b/tasks/watergroup/yesterday.go index 697f721b..e6b38638 100644 --- a/tasks/watergroup/yesterday.go +++ b/tasks/watergroup/yesterday.go @@ -69,22 +69,36 @@ func dealYesterday(gid string) { log.Printf("查询群成员总数失败, 错误信息: %v", err) } // 计算活跃度 - showActivity := err != nil && groupUsers > 0 + showActivity := err == nil && groupUsers > 0 activity := "0.00" if groupUsers > 0 { activity = fmt.Sprintf("%.2f", (float64(len(records))/float64(groupUsers))*100) } - // 计算消息总数 - var msgCount int64 - for _, v := range records { + // 计算消息总数、中位数、前十位消息总数 + var msgCount, medianCount, topTenCount int64 + for idx, v := range records { msgCount += v.Count + if idx == (len(records)/2)-1 { + medianCount = v.Count + } + if len(records) > 10 && idx < 10 { + topTenCount += v.Count + } } + // 计算活跃用户人均消息条数 + avgMsgCount := int(float64(msgCount) / float64(len(records))) + // 组装消息总数推送信息 notifyMsgs = append(notifyMsgs, " ") notifyMsgs = append(notifyMsgs, fmt.Sprintf("🗣️ 昨日本群 %d 位朋友共产生 %d 条发言", len(records), msgCount)) if showActivity { - notifyMsgs = append(notifyMsgs, fmt.Sprintf("🎭 活跃度: %s%", activity)) + m := fmt.Sprintf("🎭 活跃度: %s%%,人均消息条数: %d,中位数: %d", activity, avgMsgCount, medianCount) + // 计算前十占比 + if topTenCount > 0 { + m += fmt.Sprintf(",前十名占比: %.2f%%", float64(topTenCount)/float64(msgCount)*100) + } + notifyMsgs = append(notifyMsgs, m) } notifyMsgs = append(notifyMsgs, "\n🏵 活跃用户排行榜 🏵")