message-pusher/channel/group.go

37 lines
1.1 KiB
Go

package channel
import (
"errors"
"fmt"
"message-pusher/model"
"strings"
)
func SendGroupMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
subChannels := strings.Split(channel_.AppId, "|")
subTargets := strings.Split(channel_.AccountId, "|")
if len(subChannels) != len(subTargets) {
return errors.New("无效的群组消息配置,子通道数量与子目标数量不一致")
}
errMessage := ""
for i := 0; i < len(subChannels); i++ {
message.To = subTargets[i]
message.Channel = subChannels[i]
subChannel, err := model.GetChannelByName(subChannels[i], user.Id)
if err != nil {
return errors.New("获取群组消息子通道失败:" + err.Error())
}
if subChannel.Type == model.TypeGroup {
return errors.New("群组消息子通道不能是群组消息")
}
err = SendMessage(message, user, subChannel)
if err != nil {
errMessage += fmt.Sprintf("发送群组消息子通道 %s 失败:%s\n", subChannels[i], err.Error())
}
}
if errMessage != "" {
return errors.New(errMessage)
}
return nil
}