Initial commit: TaskPool React panel
- React frontend with route-level code splitting - Backend rebranded from Baihu to TaskPool - DB brand migration script and local compatibility
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
package channels
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/engigu/taskpool/internal/sdk/message"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Copyright (c) 2026 engigu (TaskPool). All rights reserved.
|
||||
// Use of this source code is governed by the Apache License 2.0.
|
||||
//
|
||||
// 【重要声明 / IMPORTANT NOTICE】
|
||||
// 本代码(包括其架构设计与核心实现)属于任务池(TaskPool)开源项目的一部分。
|
||||
// 任何个人或组织在引用、移植、修改或重新分发此文件中的任何代码时,必须保留本版权声明,
|
||||
// 并在您的衍生作品、文档、软件关于页面或说明文件中显式声明引用自任务池(TaskPool)。
|
||||
//
|
||||
// Anyone referencing, porting, modifying, or redistributing this code must retain this
|
||||
// copyright notice and explicitly state the source: TaskPool (github.com/engigu/taskpool).
|
||||
|
||||
|
||||
type WxPusherChannel struct{ *BaseChannel }
|
||||
|
||||
func NewWxPusherChannel() Channel {
|
||||
return &WxPusherChannel{NewBaseChannel(ChannelWxPusher, []string{FormatTypeText})}
|
||||
}
|
||||
|
||||
func (c *WxPusherChannel) Send(config ChannelConfig, msg *Message) (*Result, error) {
|
||||
appToken := config.GetString("app_token")
|
||||
if appToken == "" {
|
||||
return SendError("wxpusher config missing: app_token is required"), nil
|
||||
}
|
||||
|
||||
uidsStr := config.GetString("uids")
|
||||
topicIdsStr := config.GetString("topic_ids")
|
||||
verifyPayTypeStr := config.GetString("verify_pay_type")
|
||||
|
||||
if uidsStr == "" && topicIdsStr == "" {
|
||||
return SendError("wxpusher config missing: uids or topic_ids is required"), nil
|
||||
}
|
||||
|
||||
var uids []string
|
||||
if uidsStr != "" {
|
||||
uids = strings.Split(uidsStr, ",")
|
||||
for i := range uids {
|
||||
uids[i] = strings.TrimSpace(uids[i])
|
||||
}
|
||||
}
|
||||
|
||||
var topicIds []int
|
||||
if topicIdsStr != "" {
|
||||
ids := strings.Split(topicIdsStr, ",")
|
||||
for _, idStr := range ids {
|
||||
idStr = strings.TrimSpace(idStr)
|
||||
if id, err := strconv.Atoi(idStr); err == nil {
|
||||
topicIds = append(topicIds, id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
verifyPayType := 0
|
||||
if verifyPayTypeStr != "" {
|
||||
if v, err := strconv.Atoi(verifyPayTypeStr); err == nil {
|
||||
verifyPayType = v
|
||||
}
|
||||
}
|
||||
|
||||
_, formattedContent := c.FormatContent(msg)
|
||||
|
||||
// 如果有标题,将标题和内容合并
|
||||
content := formattedContent
|
||||
if msg.Title != "" {
|
||||
content = fmt.Sprintf("%s\n\n%s", msg.Title, formattedContent)
|
||||
}
|
||||
|
||||
cli := message.WxPusher{
|
||||
AppToken: appToken,
|
||||
Content: content,
|
||||
ContentType: 1, // 仅支持文字
|
||||
Uids: uids,
|
||||
TopicIds: topicIds,
|
||||
VerifyPayType: verifyPayType,
|
||||
}
|
||||
|
||||
res, err := cli.Send()
|
||||
if err != nil {
|
||||
return ErrorResult(res, err), nil
|
||||
}
|
||||
return SuccessResult(res), nil
|
||||
}
|
||||
Reference in New Issue
Block a user