package realtime import ( "github.com/Jeffail/gabs" "github.com/matterbridge/Rocket.Chat.Go.SDK/models" ) func (c *Client) GetChannelId(name string) (string, error) { rawResponse, err := c.ddp.Call("getRoomIdByNameOrId", name) if err != nil { return "", err } //log.Println(rawResponse) return rawResponse.(string), nil } // GetChannelsIn returns list of channels // Optionally includes date to get all since last check or 0 to get all // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/get-rooms/ func (c *Client) GetChannelsIn() ([]models.Channel, error) { rawResponse, err := c.ddp.Call("rooms/get", map[string]int{ "$date": 0, }) if err != nil { return nil, err } document, _ := gabs.Consume(rawResponse.(map[string]interface{})["update"]) chans, err := document.Children() var channels []models.Channel for _, i := range chans { channels = append(channels, models.Channel{ ID: stringOrZero(i.Path("_id").Data()), //Default: stringOrZero(i.Path("default").Data()), Name: stringOrZero(i.Path("name").Data()), Type: stringOrZero(i.Path("t").Data()), }) } return channels, nil } // GetChannelSubscriptions gets users channel subscriptions // Optionally includes date to get all since last check or 0 to get all // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/get-subscriptions func (c *Client) GetChannelSubscriptions() ([]models.ChannelSubscription, error) { rawResponse, err := c.ddp.Call("subscriptions/get", map[string]int{ "$date": 0, }) if err != nil { return nil, err } document, _ := gabs.Consume(rawResponse.(map[string]interface{})["update"]) channelSubs, err := document.Children() var channelSubscriptions []models.ChannelSubscription for _, sub := range channelSubs { channelSubscription := models.ChannelSubscription{ ID: stringOrZero(sub.Path("_id").Data()), Alert: sub.Path("alert").Data().(bool), Name: stringOrZero(sub.Path("name").Data()), DisplayName: stringOrZero(sub.Path("fname").Data()), Open: sub.Path("open").Data().(bool), Type: stringOrZero(sub.Path("t").Data()), User: models.User{ ID: stringOrZero(sub.Path("u._id").Data()), UserName: stringOrZero(sub.Path("u.username").Data()), }, Unread: sub.Path("unread").Data().(float64), } if sub.Path("roles").Data() != nil { var roles []string for _, role := range sub.Path("roles").Data().([]interface{}) { roles = append(roles, role.(string)) } channelSubscription.Roles = roles } channelSubscriptions = append(channelSubscriptions, channelSubscription) } return channelSubscriptions, nil } // GetChannelRoles returns room roles // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/get-room-roles func (c *Client) GetChannelRoles(roomId string) error { _, err := c.ddp.Call("getRoomRoles", roomId) if err != nil { return err } return nil } // CreateChannel creates a channel // Takes name and users array // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/create-channels func (c *Client) CreateChannel(name string, users []string) error { _, err := c.ddp.Call("createChannel", name, users) if err != nil { return err } return nil } // CreateGroup creates a private group // Takes group name and array of users // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/create-private-groups func (c *Client) CreateGroup(name string, users []string) error { _, err := c.ddp.Call("createPrivateGroup", name, users) if err != nil { return err } return nil } // JoinChannel joins a channel // Takes roomId // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/joining-channels func (c *Client) JoinChannel(roomId string) error { _, err := c.ddp.Call("joinRoom", roomId) if err != nil { return err } return nil } // LeaveChannel leaves a channel // Takes roomId // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/leaving-rooms func (c *Client) LeaveChannel(roomId string) error { _, err := c.ddp.Call("leaveRoom", roomId) if err != nil { return err } return nil } // ArchiveChannel archives the channel // Takes roomId // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/archive-rooms func (c *Client) ArchiveChannel(roomId string) error { _, err := c.ddp.Call("archiveRoom", roomId) if err != nil { return err } return nil } // UnArchiveChannel unarchives the channel // Takes roomId // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/unarchive-rooms func (c *Client) UnArchiveChannel(roomId string) error { _, err := c.ddp.Call("unarchiveRoom", roomId) if err != nil { return err } return nil } // DeleteChannel deletes the channel // Takes roomId // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/delete-rooms func (c *Client) DeleteChannel(roomId string) error { _, err := c.ddp.Call("eraseRoom", roomId) if err != nil { return err } return nil } // SetChannelTopic sets channel topic // takes roomId and topic // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/save-room-settings func (c *Client) SetChannelTopic(roomId string, topic string) error { _, err := c.ddp.Call("saveRoomSettings", roomId, "roomTopic", topic) if err != nil { return err } return nil } // SetChannelType sets the channel type // takes roomId and roomType // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/save-room-settings func (c *Client) SetChannelType(roomId string, roomType string) error { _, err := c.ddp.Call("saveRoomSettings", roomId, "roomType", roomType) if err != nil { return err } return nil } // SetChannelJoinCode sets channel join code // takes roomId and joinCode // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/save-room-settings func (c *Client) SetChannelJoinCode(roomId string, joinCode string) error { _, err := c.ddp.Call("saveRoomSettings", roomId, "joinCode", joinCode) if err != nil { return err } return nil } // SetChannelReadOnly sets channel as read only // takes roomId and boolean // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/save-room-settings func (c *Client) SetChannelReadOnly(roomId string, readOnly bool) error { _, err := c.ddp.Call("saveRoomSettings", roomId, "readOnly", readOnly) if err != nil { return err } return nil } // SetChannelDescription sets channels description // takes roomId and description // // https://rocket.chat/docs/developer-guides/realtime-api/method-calls/save-room-settings func (c *Client) SetChannelDescription(roomId string, description string) error { _, err := c.ddp.Call("saveRoomSettings", roomId, "roomDescription", description) if err != nil { return err } return nil }