From 068bc8682878c521a751bf9e6fcb58486c3bb048 Mon Sep 17 00:00:00 2001 From: 5elenay <5elenay@protonmail.com> Date: Sat, 21 Aug 2021 06:26:26 +0300 Subject: [PATCH] added fetch messages. --- channel.go | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++--- message.go | 18 +++++++++--------- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/channel.go b/channel.go index fdb2bfd..b550909 100644 --- a/channel.go +++ b/channel.go @@ -2,6 +2,8 @@ package revoltgo import ( "encoding/json" + "fmt" + "reflect" ) // Channel struct. @@ -24,8 +26,19 @@ type Channel struct { Permissions int `json:"permissions"` } +// Similar to message, but created for sendmessage function. +type SendMessageStruct struct { + Content string `json:"content"` + Attachments []string `json:"attachments"` + Nonce string `json:"nonce"` + Replies []struct { + Id string `json:"id"` + Mention bool `json:"mention"` + } +} + // Send a message to the channel. -func (c Channel) SendMessage(message *Message) (*Message, error) { +func (c Channel) SendMessage(message *SendMessageStruct) (*Message, error) { if message.Nonce == "" { message.Nonce = genULID() } @@ -49,6 +62,43 @@ func (c Channel) SendMessage(message *Message) (*Message, error) { return respMessage, err } - message.Client = c.Client - return message, nil + respMessage.Client = c.Client + return respMessage, nil +} + +// Fetch messages from channel. +// Check: https://developers.revolt.chat/api/#tag/Messaging/paths/~1channels~1:channel~1messages/get for map parameters. +func (c Channel) FetchMessages(options map[string]interface{}) ([]*Message, error) { + // Format url + url := "/channels/" + c.Id + "/messages?" + + for key, value := range options { + if !reflect.ValueOf(value).IsZero() { + url += fmt.Sprintf("%s=%v&", key, value) + } + } + + url = url[:len(url)-1] + + fetchedMsgs := []*Message{} + + // Send request + resp, err := c.Client.Request("GET", url, []byte{}) + + if err != nil { + return fetchedMsgs, err + } + + err = json.Unmarshal(resp, &fetchedMsgs) + + if err != nil { + return fetchedMsgs, err + } + + // Add client to users & messages + for _, msg := range fetchedMsgs { + msg.Client = c.Client + } + + return fetchedMsgs, nil } diff --git a/message.go b/message.go index a7604d6..9c44cb2 100644 --- a/message.go +++ b/message.go @@ -4,14 +4,15 @@ package revoltgo type Message struct { Client *Client - Id string `json:"_id"` - Nonce string `json:"nonce"` - ChannelId string `json:"channel"` - AuthorId string `json:"author"` - Content string `json:"content"` - Attachments []*Attachment `json:"attachments"` - Mentions []string `json:"mentions"` - Replies []string `json:"replies"` + Id string `json:"_id"` + Nonce string `json:"nonce"` + ChannelId string `json:"channel"` + AuthorId string `json:"author"` + Content interface{} `json:"content"` + Embeds []*MessageEmbed `json:"embeds"` + Attachments []*Attachment `json:"attachments"` + Mentions []string `json:"mentions"` + Replies []string `json:"replies"` } // Attachment struct. @@ -22,7 +23,6 @@ type Attachment struct { FileName string `json:"filename"` Metadata *AttachmentMetadata ContentType string `json:"content_type"` - Embeds []*MessageEmbed } // Attachment metadata struct.