12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- package channel
- import (
- "bytes"
- "encoding/json"
- "errors"
- "message-pusher/model"
- "net/http"
- "strings"
- )
- type discordMessageRequest struct {
- Content string `json:"content"`
- }
- type discordMessageResponse struct {
- Code int `json:"code"`
- Message string `json:"message"`
- }
- func SendDiscordMessage(message *model.Message, user *model.User, channel_ *model.Channel) error {
- if message.Content == "" {
- message.Content = message.Description
- }
- messageRequest := discordMessageRequest{
- Content: message.Content,
- }
- // https://discord.com/developers/docs/reference#message-formatting
- if message.To != "" {
- messageRequest.Content = ""
- ids := strings.Split(message.To, "|")
- for _, id := range ids {
- messageRequest.Content = "<@" + id + "> " + messageRequest.Content
- }
- messageRequest.Content = messageRequest.Content + message.Content
- }
- jsonData, err := json.Marshal(messageRequest)
- if err != nil {
- return err
- }
- resp, err := http.Post(channel_.URL, "application/json", bytes.NewBuffer(jsonData))
- if err != nil {
- return err
- }
- if resp.StatusCode == http.StatusNoContent {
- return nil
- }
- var res discordMessageResponse
- err = json.NewDecoder(resp.Body).Decode(&res)
- if err != nil {
- return err
- }
- if res.Code != 0 {
- return errors.New(res.Message)
- }
- if resp.StatusCode == http.StatusBadRequest {
- return errors.New(resp.Status)
- }
- return nil
- }
|