package rest import ( "bytes" "fmt" "net/url" "github.com/matterbridge/Rocket.Chat.Go.SDK/models" ) type ChannelsResponse struct { Status models.Pagination Channels []models.Channel `json:"channels"` } type ChannelResponse struct { Status Channel models.Channel `json:"channel"` } // GetPublicChannels returns all channels that can be seen by the logged in user. // // https://rocket.chat/docs/developer-guides/rest-api/channels/list func (c *Client) GetPublicChannels() (*ChannelsResponse, error) { response := new(ChannelsResponse) if err := c.Get("channels.list", nil, response); err != nil { return nil, err } return response, nil } // GetJoinedChannels returns all channels that the user has joined. // // https://rocket.chat/docs/developer-guides/rest-api/channels/list-joined func (c *Client) GetJoinedChannels(params url.Values) (*ChannelsResponse, error) { response := new(ChannelsResponse) if err := c.Get("channels.list.joined", params, response); err != nil { return nil, err } return response, nil } // LeaveChannel leaves a channel. The id of the channel has to be not nil. // // https://rocket.chat/docs/developer-guides/rest-api/channels/leave func (c *Client) LeaveChannel(channel *models.Channel) error { var body = fmt.Sprintf(`{ "roomId": "%s"}`, channel.ID) return c.Post("channels.leave", bytes.NewBufferString(body), new(ChannelResponse)) } // GetChannelInfo get information about a channel. That might be useful to update the usernames. // // https://rocket.chat/docs/developer-guides/rest-api/channels/info func (c *Client) GetChannelInfo(channel *models.Channel) (*models.Channel, error) { response := new(ChannelResponse) switch { case channel.Name != "" && channel.ID == "": if err := c.Get("channels.info", url.Values{"roomName": []string{channel.Name}}, response); err != nil { return nil, err } default: if err := c.Get("channels.info", url.Values{"roomId": []string{channel.ID}}, response); err != nil { return nil, err } } return &response.Channel, nil }