5
0
mirror of https://github.com/cwinfo/matterbridge.git synced 2024-11-26 08:51:35 +00:00
matterbridge/vendor/github.com/matterbridge/matterclient/users.go
2021-10-16 23:23:24 +02:00

213 lines
3.4 KiB
Go

package matterclient
import (
"github.com/mattermost/mattermost-server/v6/model"
)
func (m *Client) GetNickName(userID string) string {
if user := m.GetUser(userID); user != nil {
return user.Nickname
}
return ""
}
func (m *Client) GetStatus(userID string) string {
res, _, err := m.Client.GetUserStatus(userID, "")
if err != nil {
return ""
}
if res.Status == model.StatusAway {
return "away"
}
if res.Status == model.StatusOnline {
return "online"
}
return "offline"
}
func (m *Client) GetStatuses() map[string]string {
var ids []string
statuses := make(map[string]string)
for id := range m.Users {
ids = append(ids, id)
}
res, _, err := m.Client.GetUsersStatusesByIds(ids)
if err != nil {
return statuses
}
for _, status := range res {
statuses[status.UserId] = "offline"
if status.Status == model.StatusAway {
statuses[status.UserId] = "away"
}
if status.Status == model.StatusOnline {
statuses[status.UserId] = "online"
}
}
return statuses
}
func (m *Client) GetTeamID() string {
return m.Team.ID
}
// GetTeamName returns the name of the specified teamId
func (m *Client) GetTeamName(teamID string) string {
m.RLock()
defer m.RUnlock()
for _, t := range m.OtherTeams {
if t.ID == teamID {
return t.Team.Name
}
}
return ""
}
func (m *Client) GetUser(userID string) *model.User {
m.Lock()
defer m.Unlock()
_, ok := m.Users[userID]
if !ok {
res, _, err := m.Client.GetUser(userID, "")
if err != nil {
return nil
}
m.Users[userID] = res
}
return m.Users[userID]
}
func (m *Client) GetUserName(userID string) string {
if user := m.GetUser(userID); user != nil {
return user.Username
}
return ""
}
func (m *Client) 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 *Client) UpdateUsers() error {
idx := 0
max := 200
var (
mmusers []*model.User
resp *model.Response
err error
)
for {
mmusers, resp, err = m.Client.GetUsers(idx, max, "")
if err == nil {
break
}
if err = m.HandleRatelimit("GetUsers", resp); err != nil {
return err
}
}
for len(mmusers) > 0 {
m.Lock()
for _, user := range mmusers {
m.Users[user.Id] = user
}
m.Unlock()
for {
mmusers, resp, err = m.Client.GetUsers(idx, max, "")
if err == nil {
idx++
break
}
if err := m.HandleRatelimit("GetUsers", resp); err != nil {
return err
}
}
}
return nil
}
func (m *Client) UpdateUserNick(nick string) error {
user := m.User
user.Nickname = nick
_, _, err := m.Client.UpdateUser(user)
if err != nil {
return err
}
return nil
}
func (m *Client) UsernamesInChannel(channelID string) []string {
res, _, err := m.Client.GetChannelMembers(channelID, 0, 50000, "")
if err != nil {
m.logger.Errorf("UsernamesInChannel(%s) failed: %s", channelID, err)
return []string{}
}
allusers := m.GetUsers()
result := []string{}
for _, member := range res {
result = append(result, allusers[member.UserId].Nickname)
}
return result
}
func (m *Client) UpdateStatus(userID string, status string) error {
_, _, err := m.Client.UpdateUserStatus(userID, &model.Status{Status: status})
if err != nil {
return err
}
return nil
}
func (m *Client) UpdateUser(userID string) {
m.Lock()
defer m.Unlock()
res, _, err := m.Client.GetUser(userID, "")
if err != nil {
return
}
m.Users[userID] = res
}