group.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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. var subTargets []string
  11. if message.To != "" {
  12. subTargets = strings.Split(message.To, "|")
  13. } else {
  14. subTargets = strings.Split(channel_.AccountId, "|")
  15. }
  16. if len(subChannels) != len(subTargets) {
  17. return errors.New("无效的群组消息配置,子通道数量与子目标数量不一致")
  18. }
  19. errMessage := ""
  20. for i := 0; i < len(subChannels); i++ {
  21. message.To = subTargets[i]
  22. message.Channel = subChannels[i]
  23. subChannel, err := model.GetChannelByName(subChannels[i], user.Id)
  24. if err != nil {
  25. return errors.New("获取群组消息子通道失败:" + err.Error())
  26. }
  27. if subChannel.Type == model.TypeGroup {
  28. return errors.New("群组消息子通道不能是群组消息")
  29. }
  30. err = SendMessage(message, user, subChannel)
  31. if err != nil {
  32. errMessage += fmt.Sprintf("发送群组消息子通道 %s 失败:%s\n", subChannels[i], err.Error())
  33. }
  34. }
  35. if errMessage != "" {
  36. return errors.New(errMessage)
  37. }
  38. return nil
  39. }