summaryrefslogtreecommitdiffstats
path: root/matterclient/users.go
diff options
context:
space:
mode:
Diffstat (limited to 'matterclient/users.go')
-rw-r--r--matterclient/users.go154
1 files changed, 154 insertions, 0 deletions
diff --git a/matterclient/users.go b/matterclient/users.go
new file mode 100644
index 00000000..3dea7ce5
--- /dev/null
+++ b/matterclient/users.go
@@ -0,0 +1,154 @@
+package matterclient
+
+import (
+ "errors"
+
+ "github.com/mattermost/mattermost-server/model"
+)
+
+func (m *MMClient) GetNickName(userId string) string { //nolint:golint
+ user := m.GetUser(userId)
+ if user != nil {
+ return user.Nickname
+ }
+ return ""
+}
+
+func (m *MMClient) GetStatus(userId string) string { //nolint:golint
+ res, resp := m.Client.GetUserStatus(userId, "")
+ if resp.Error != nil {
+ return ""
+ }
+ if res.Status == model.STATUS_AWAY {
+ return "away"
+ }
+ if res.Status == model.STATUS_ONLINE {
+ return "online"
+ }
+ return "offline"
+}
+
+func (m *MMClient) GetStatuses() map[string]string {
+ var ids []string
+ statuses := make(map[string]string)
+ for id := range m.Users {
+ ids = append(ids, id)
+ }
+ res, resp := m.Client.GetUsersStatusesByIds(ids)
+ if resp.Error != nil {
+ return statuses
+ }
+ for _, status := range res {
+ statuses[status.UserId] = "offline"
+ if status.Status == model.STATUS_AWAY {
+ statuses[status.UserId] = "away"
+ }
+ if status.Status == model.STATUS_ONLINE {
+ statuses[status.UserId] = "online"
+ }
+ }
+ return statuses
+}
+
+func (m *MMClient) GetTeamId() string { //nolint:golint
+ return m.Team.Id
+}
+
+// GetTeamName returns the name of the specified teamId
+func (m *MMClient) GetTeamName(teamId string) string { //nolint:golint
+ m.RLock()
+ defer m.RUnlock()
+ for _, t := range m.OtherTeams {
+ if t.Id == teamId {
+ return t.Team.Name
+ }
+ }
+ return ""
+}
+
+func (m *MMClient) GetUser(userId string) *model.User { //nolint:golint
+ m.Lock()
+ defer m.Unlock()
+ _, ok := m.Users[userId]
+ if !ok {
+ res, resp := m.Client.GetUser(userId, "")
+ if resp.Error != nil {
+ return nil
+ }
+ m.Users[userId] = res
+ }
+ return m.Users[userId]
+}
+
+func (m *MMClient) GetUserName(userId string) string { //nolint:golint
+ user := m.GetUser(userId)
+ if user != nil {
+ return user.Username
+ }
+ return ""
+}
+
+func (m *MMClient) GetUsers() map[string]*model.User {
+ users := make(map[string]*model.User)
+ m.RLock()
+ defer m.RUnlock()
+ for k, v := range m.Users {
+ users[k] = v
+ }
+ return users
+}
+
+func (m *MMClient) UpdateUsers() error {
+ mmusers, resp := m.Client.GetUsers(0, 50000, "")
+ if resp.Error != nil {
+ return errors.New(resp.Error.DetailedError)
+ }
+ m.Lock()
+ for _, user := range mmusers {
+ m.Users[user.Id] = user
+ }
+ m.Unlock()
+ return nil
+}
+
+func (m *MMClient) UpdateUserNick(nick string) error {
+ user := m.User
+ user.Nickname = nick
+ _, resp := m.Client.UpdateUser(user)
+ if resp.Error != nil {
+ return resp.Error
+ }
+ return nil
+}
+
+func (m *MMClient) UsernamesInChannel(channelId string) []string { //nolint:golint
+ res, resp := m.Client.GetChannelMembers(channelId, 0, 50000, "")
+ if resp.Error != nil {
+ m.log.Errorf("UsernamesInChannel(%s) failed: %s", channelId, resp.Error)
+ return []string{}
+ }
+ allusers := m.GetUsers()
+ result := []string{}
+ for _, member := range *res {
+ result = append(result, allusers[member.UserId].Nickname)
+ }
+ return result
+}
+
+func (m *MMClient) UpdateStatus(userId string, status string) error { //nolint:golint
+ _, resp := m.Client.UpdateUserStatus(userId, &model.Status{Status: status})
+ if resp.Error != nil {
+ return resp.Error
+ }
+ return nil
+}
+
+func (m *MMClient) UpdateUser(userId string) { //nolint:golint
+ m.Lock()
+ defer m.Unlock()
+ res, resp := m.Client.GetUser(userId, "")
+ if resp.Error != nil {
+ return
+ }
+ m.Users[userId] = res
+}