李寻欢 080fdb66ab
All checks were successful
BuildImage / build-image (push) Successful in 2m2s
🎨 添加定时任务调度,优化消息同步逻辑,更新相关API接口调用
2025-04-07 16:08:55 +08:00

73 lines
2.0 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package tasks
import (
"context"
"gitee.ltd/lxh/wechat-robot/internal/docker"
"gitee.ltd/lxh/wechat-robot/internal/model"
"gitee.ltd/lxh/wechat-robot/internal/types"
"strings"
"time"
)
// syncMessage
// @description: 同步指定机器人的消息
// @param containerHost 机器人接口地址
// @param robotWxId 机器人微信Id
// @param robotId 机器人数据Id
func syncMessage(containerHost, robotWxId string, robotId uint) {
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
messages, isOffline, err := docker.GetWechatMessages(ctx, containerHost, robotWxId)
if err != nil {
// 处理错误
return
}
db := model.GetDB()
if isOffline {
// 删除定时任务
DeleteJob(robotId)
// 修改机器人状态
db.Model(&model.Robot{}).Where("id = ?", robotId).Update("status", "offline")
return
}
if len(messages) == 0 {
// 没有消息,直接返回
return
}
// 处理消息
var msg []model.Message
for _, message := range messages {
var m model.Message
m.RobotId = robotId
m.MsgId = message.NewMsgId
m.CreateTime = message.CreateTime
m.CreateAt = time.Unix(int64(message.CreateTime), 0)
m.Type = message.MsgType
m.Content = message.Content.String
m.DisplayFullContent = message.PushContent
m.FromUser = message.FromUserName.String
m.ToUser = message.ToWxid.String
// 如果是群聊消息,单独处理一下
// Sys类型的消息正文不包含微信 Id所以不需要处理
if strings.HasSuffix(message.FromUserName.String, "@chatroom") && message.MsgType != types.MsgTypeSys {
// 群消息,处理一下消息和发信人
groupUser := strings.Split(m.Content, "\n")[0]
groupUser = strings.ReplaceAll(groupUser, ":", "")
// 如果两个id一致说明是系统发的
if m.FromUser != groupUser {
m.GroupUser = groupUser
}
// 用户的操作单独提出来处理一下
m.Content = strings.Join(strings.Split(m.Content, "\n")[1:], "\n")
}
msg = append(msg, m)
}
// 保存入库
db.Save(&msg)
}