69 lines
2.1 KiB
Go
69 lines
2.1 KiB
Go
|
package cleargroupuser
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"go-wechat/client"
|
|||
|
"go-wechat/entity"
|
|||
|
"go-wechat/service"
|
|||
|
"go-wechat/utils"
|
|||
|
"log"
|
|||
|
"strings"
|
|||
|
)
|
|||
|
|
|||
|
// ClearGroupUser
|
|||
|
// @description: 清理群成员
|
|||
|
func ClearGroupUser() {
|
|||
|
groups, err := service.GetAllEnableNews()
|
|||
|
if err != nil {
|
|||
|
log.Printf("获取启用了聊天排行榜的群组失败, 错误信息: %v", err)
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
for _, group := range groups {
|
|||
|
// 获取需要清理的群成员Id
|
|||
|
members := getNeedDeleteMembers(group.Wxid, group.ClearMember)
|
|||
|
memberCount := len(members)
|
|||
|
log.Printf("群[%s(%s)]需要清理的成员数量: %d", group.Nickname, group.Wxid, memberCount)
|
|||
|
if memberCount < 1 {
|
|||
|
continue
|
|||
|
}
|
|||
|
var memberMap = make(map[string]string)
|
|||
|
var deleteIds = make([]string, 0)
|
|||
|
for _, member := range members {
|
|||
|
deleteIds = append(deleteIds, member.Wxid)
|
|||
|
// 昵称为空,取id后4位
|
|||
|
if member.Nickname == "" {
|
|||
|
member.Nickname = "无名氏_" + member.Wxid[len(member.Wxid)-4:]
|
|||
|
}
|
|||
|
memberMap[member.Nickname] = member.LastActive.Format("2006-01-02 15:04:05")
|
|||
|
}
|
|||
|
// 调用接口
|
|||
|
utils.DeleteGroupMember(group.Wxid, strings.Join(deleteIds, ","), 0)
|
|||
|
// 发送通知到群里
|
|||
|
ms := make([]string, 0)
|
|||
|
for k, v := range memberMap {
|
|||
|
ms = append(ms, fmt.Sprintf("%s: %s", k, v))
|
|||
|
}
|
|||
|
msg := fmt.Sprintf("#清理群成员#\n\n很遗憾地通知各位,就在刚刚,有%d名群友引活跃度不够暂时离开了我们,希望还健在的群友引以为戒、保持活跃!\n\n活跃信息: \n%s",
|
|||
|
memberCount, strings.Join(ms, "\n"))
|
|||
|
utils.SendMessage(group.Wxid, "", msg, 0)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// getNeedDeleteMembers
|
|||
|
// @description: 获取需要删除的群成员
|
|||
|
// @param groupId 群Id
|
|||
|
// @param days 需要清理的未活跃的天数
|
|||
|
// @return members
|
|||
|
func getNeedDeleteMembers(groupId string, days int) (members []entity.GroupUser) {
|
|||
|
err := client.MySQL.Model(&entity.GroupUser{}).Where("group_id = ?", groupId).
|
|||
|
Where("is_member IS TRUE").
|
|||
|
Where("DATEDIFF( NOW(), last_active ) >= ?", days).
|
|||
|
Order("last_active DESC").
|
|||
|
Find(&members).Error
|
|||
|
if err != nil {
|
|||
|
log.Printf("获取需要清理的群成员失败, 错误信息: %v", err)
|
|||
|
}
|
|||
|
return
|
|||
|
}
|