mirror of
https://github.com/42wim/matterbridge.git
synced 2024-12-23 11:42:37 +01:00
166 lines
3.5 KiB
Go
166 lines
3.5 KiB
Go
package matterclient
|
|
|
|
import (
|
|
"errors"
|
|
"time"
|
|
|
|
"github.com/mattermost/mattermost-server/v5/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 {
|
|
idx := 0
|
|
max := 200
|
|
mmusers, resp := m.Client.GetUsers(idx, max, "")
|
|
if resp.Error != nil {
|
|
return errors.New(resp.Error.DetailedError)
|
|
}
|
|
for len(mmusers) > 0 {
|
|
m.Lock()
|
|
for _, user := range mmusers {
|
|
m.Users[user.Id] = user
|
|
}
|
|
m.Unlock()
|
|
mmusers, resp = m.Client.GetUsers(idx, max, "")
|
|
time.Sleep(time.Millisecond * 300)
|
|
if resp.Error != nil {
|
|
return errors.New(resp.Error.DetailedError)
|
|
}
|
|
idx++
|
|
}
|
|
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.logger.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
|
|
}
|