mirror of
https://github.com/cwinfo/matterbridge.git
synced 2024-11-26 08:51:35 +00:00
213 lines
3.4 KiB
Go
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
|
|
}
|