telegram.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package channel
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "message-pusher/model"
  8. "net/http"
  9. )
  10. type telegramMessageRequest struct {
  11. ChatId string `json:"chat_id"`
  12. Text string `json:"text"`
  13. ParseMode string `json:"parse_mode"`
  14. }
  15. type telegramMessageResponse struct {
  16. Ok bool `json:"ok"`
  17. Description string `json:"description"`
  18. }
  19. func SendTelegramMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
  20. // https://core.telegram.org/bots/api#sendmessage
  21. messageRequest := telegramMessageRequest{
  22. ChatId: channel_.AccountId,
  23. Text: message.Content,
  24. ParseMode: "markdown",
  25. }
  26. if message.To != "" {
  27. messageRequest.ChatId = message.To
  28. }
  29. if messageRequest.Text == "" {
  30. messageRequest.Text = message.Description
  31. }
  32. jsonData, err := json.Marshal(messageRequest)
  33. if err != nil {
  34. return err
  35. }
  36. resp, err := http.Post(fmt.Sprintf("https://api.telegram.org/bot%s/sendMessage", channel_.Secret), "application/json",
  37. bytes.NewBuffer(jsonData))
  38. if err != nil {
  39. return err
  40. }
  41. var res telegramMessageResponse
  42. err = json.NewDecoder(resp.Body).Decode(&res)
  43. if err != nil {
  44. return err
  45. }
  46. if !res.Ok {
  47. return errors.New(res.Description)
  48. }
  49. return nil
  50. }