group.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. package channel
  2. import (
  3. "errors"
  4. "fmt"
  5. "message-pusher/model"
  6. "strings"
  7. )
  8. func SendGroupMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
  9. subChannels := strings.Split(channel_.AppId, "|")
  10. subTargets := strings.Split(channel_.AccountId, "|")
  11. if len(subChannels) != len(subTargets) {
  12. return errors.New("无效的群组消息配置,子通道数量与子目标数量不一致")
  13. }
  14. errMessage := ""
  15. for i := 0; i < len(subChannels); i++ {
  16. message.To = subTargets[i]
  17. message.Channel = subChannels[i]
  18. subChannel, err := model.GetChannelByName(subChannels[i], user.Id)
  19. if err != nil {
  20. return errors.New("获取群组消息子通道失败:" + err.Error())
  21. }
  22. if subChannel.Type == model.TypeGroup {
  23. return errors.New("群组消息子通道不能是群组消息")
  24. }
  25. err = SendMessage(message, user, subChannel)
  26. if err != nil {
  27. errMessage += fmt.Sprintf("发送群组消息子通道 %s 失败:%s\n", subChannels[i], err.Error())
  28. }
  29. }
  30. if errMessage != "" {
  31. return errors.New(errMessage)
  32. }
  33. return nil
  34. }