matterbridge/vendor/layeh.com/gumble/gumble/userlist.go
2020-10-01 22:50:56 +02:00

75 lines
1.7 KiB
Go

package gumble
import (
"time"
"layeh.com/gumble/gumble/MumbleProto"
)
// RegisteredUser represents a registered user on the server.
type RegisteredUser struct {
// The registered user's ID.
UserID uint32
// The registered user's name.
Name string
// The last time the user was seen by the server.
LastSeen time.Time
// The last channel the user was seen in.
LastChannel *Channel
changed bool
deregister bool
}
// SetName sets the new name for the user.
func (r *RegisteredUser) SetName(name string) {
r.Name = name
r.changed = true
}
// Deregister will remove the registered user from the server.
func (r *RegisteredUser) Deregister() {
r.deregister = true
}
// Register will keep the user registered on the server. This is only useful if
// Deregister() was called on the registered user.
func (r *RegisteredUser) Register() {
r.deregister = false
}
// ACLUser returns an ACLUser for the given registered user.
func (r *RegisteredUser) ACLUser() *ACLUser {
return &ACLUser{
UserID: r.UserID,
Name: r.Name,
}
}
// RegisteredUsers is a list of users who are registered on the server.
//
// Whenever a registered user is changed, it does not come into effect until
// the registered user list is sent back to the server.
type RegisteredUsers []*RegisteredUser
func (r RegisteredUsers) writeMessage(client *Client) error {
packet := MumbleProto.UserList{}
for _, user := range r {
if user.deregister || user.changed {
userListUser := &MumbleProto.UserList_User{
UserId: &user.UserID,
}
if !user.deregister {
userListUser.Name = &user.Name
}
packet.Users = append(packet.Users, userListUser)
}
}
if len(packet.Users) <= 0 {
return nil
}
return client.Conn.WriteProto(&packet)
}