diff options
| author | Mistivia <i@mistivia.com> | 2025-11-02 15:27:18 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-11-02 15:27:18 +0800 |
| commit | e9c24f4af7ed56760f6db7941827d09f6db9020b (patch) | |
| tree | 62128c43b883ce5e3148113350978755779bb5de /teleirc/matterbridge/matterclient/users.go | |
| parent | 58d5e7cfda4781d8a57ec52aefd02983835c301a (diff) | |
add matterbridge
Diffstat (limited to 'teleirc/matterbridge/matterclient/users.go')
| -rw-r--r-- | teleirc/matterbridge/matterclient/users.go | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/teleirc/matterbridge/matterclient/users.go b/teleirc/matterbridge/matterclient/users.go new file mode 100644 index 0000000..42c4162 --- /dev/null +++ b/teleirc/matterbridge/matterclient/users.go @@ -0,0 +1,165 @@ +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 +} |
