mirror of
https://github.com/yincongcyincong/wechat_chatter.git
synced 2026-07-15 10:26:52 +08:00
71 lines
1.9 KiB
Go
71 lines
1.9 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
func SendWorker() {
|
|
defer func() {
|
|
if err := recover(); err != nil {
|
|
log.Printf("💥 SendWorker 异常: %v\n", err)
|
|
go SendWorker()
|
|
}
|
|
}()
|
|
|
|
for {
|
|
select {
|
|
case <-finishChan:
|
|
fmt.Printf("收到完成信号 \n")
|
|
case m, ok := <-msgChan:
|
|
if !ok {
|
|
return
|
|
}
|
|
SendWechatMsg(m)
|
|
}
|
|
}
|
|
}
|
|
|
|
func SendWechatMsg(m *SendMsg) {
|
|
time.Sleep(time.Duration(config.SendInterval) * time.Millisecond)
|
|
currTaskId := atomic.AddInt64(&taskId, 1)
|
|
log.Printf("📩 收到任务: %d\n", currTaskId)
|
|
|
|
ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second)
|
|
defer cancel()
|
|
|
|
targetId := m.UserId
|
|
if m.GroupID != "" && targetId == "" {
|
|
targetId = m.GroupID
|
|
}
|
|
|
|
switch m.Type {
|
|
case "text":
|
|
result := fridaScript.ExportsCall("triggerSendTextMessage", currTaskId, targetId, m.Content, m.AtUser)
|
|
log.Printf("📩 发送文本任务执行结果:%s, 参数:currTaskId: %d, targetId: %s, content: %s, atUser: %s\n",
|
|
result, currTaskId, targetId, m.Content, m.AtUser)
|
|
case "image":
|
|
targetPath, md5Str, err := SaveBase64Image(m.Content)
|
|
if err != nil {
|
|
log.Printf("保存图片失败: %v\n", err)
|
|
return
|
|
}
|
|
|
|
result := fridaScript.ExportsCall("triggerUploadImg", targetId, md5Str, targetPath)
|
|
log.Printf("📩 上传图片任务执行结果%s, 参数:targetId: %s, md5Str: %s, targetPath: %s\n", result, targetId, md5Str, targetPath)
|
|
case "send_image":
|
|
result := fridaScript.ExportsCall("triggerSendImgMessage", currTaskId, myWechatId, targetId)
|
|
log.Printf("📩 发送图片任务执行结果%s, 参数:currTaskId: %d, myWechatId: %s, targetId: %s\n", result, currTaskId, myWechatId, targetId)
|
|
}
|
|
|
|
select {
|
|
case <-ctx.Done():
|
|
log.Printf("任务 %d 执行超时!\n", currTaskId)
|
|
case <-finishChan:
|
|
log.Printf("收到完成信号,任务 %d 完成\n", currTaskId)
|
|
}
|
|
}
|