Files
mautrix-telegram/pkg/gotd/telegram/peers/members/rights.go
T
2025-06-27 20:03:37 -07:00

119 lines
4.0 KiB
Go

package members
import (
"time"
"go.mau.fi/mautrix-telegram/pkg/gotd/tg"
)
// AdminRights represents admin right settings.
type AdminRights struct {
// Indicates the role (rank) of the admin in the group: just an arbitrary string.
//
// If empty, will not be used.
Rank string
// If set, allows the admin to modify the description of the channel/supergroup.
ChangeInfo bool
// If set, allows the admin to post messages in the channel.
PostMessages bool
// If set, allows the admin to also edit messages from other admins in the channel.
EditMessages bool
// If set, allows the admin to also delete messages from other admins in the channel.
DeleteMessages bool
// If set, allows the admin to ban users from the channel/supergroup.
BanUsers bool
// If set, allows the admin to invite users in the channel/supergroup.
InviteUsers bool
// If set, allows the admin to pin messages in the channel/supergroup.
PinMessages bool
// If set, allows the admin to add other admins with the same (or more limited)
// permissions in the channel/supergroup.
AddAdmins bool
// Whether this admin is anonymous.
Anonymous bool
// If set, allows the admin to change group call/livestream settings.
ManageCall bool
// Set this flag if none of the other flags are set, but you still want the user to be an
// admin.
Other bool
}
// IntoChatAdminRights converts AdminRights into tg.ChatAdminRights.
func (b AdminRights) IntoChatAdminRights() (r tg.ChatAdminRights) {
r.ChangeInfo = b.ChangeInfo
r.PostMessages = b.PostMessages
r.EditMessages = b.EditMessages
r.DeleteMessages = b.DeleteMessages
r.BanUsers = b.BanUsers
r.InviteUsers = b.InviteUsers
r.PinMessages = b.PinMessages
r.AddAdmins = b.AddAdmins
r.Anonymous = b.Anonymous
r.ManageCall = b.ManageCall
r.Other = b.Other
r.SetFlags()
return r
}
// MemberRights represents member right settings.
type MemberRights struct {
// If set, does not allow a user to view messages in a supergroup/channel/chat.
//
// In fact, user will be kicked.
DenyViewMessages bool
// If set, does not allow a user to send messages in a supergroup/chat.
DenySendMessages bool
// If set, does not allow a user to send any media in a supergroup/chat.
DenySendMedia bool
// If set, does not allow a user to send stickers in a supergroup/chat.
DenySendStickers bool
// If set, does not allow a user to send gifs in a supergroup/chat.
DenySendGifs bool
// If set, does not allow a user to send games in a supergroup/chat.
DenySendGames bool
// If set, does not allow a user to use inline bots in a supergroup/chat.
DenySendInline bool
// If set, does not allow a user to embed links in the messages of a supergroup/chat.
DenyEmbedLinks bool
// If set, does not allow a user to send polls in a supergroup/chat.
DenySendPolls bool
// If set, does not allow any user to change the description of a supergroup/chat.
DenyChangeInfo bool
// If set, does not allow any user to invite users in a supergroup/chat.
DenyInviteUsers bool
// If set, does not allow any user to pin messages in a supergroup/chat.
DenyPinMessages bool
// Validity of said permissions (it is considered forever any value less than 30 seconds or more than 366 days).
//
// If value is zero, value will not be used.
UntilDate time.Time
}
// ApplyFor sets duration of validity of set rights.
func (b *MemberRights) ApplyFor(d time.Duration) {
b.UntilDate = time.Now().Add(d)
}
// IntoChatBannedRights converts MemberRights into tg.ChatBannedRights.
func (b MemberRights) IntoChatBannedRights() (r tg.ChatBannedRights) {
r = tg.ChatBannedRights{
ViewMessages: b.DenyViewMessages,
SendMessages: b.DenySendMessages,
SendMedia: b.DenySendMedia,
SendStickers: b.DenySendStickers,
SendGifs: b.DenySendGifs,
SendGames: b.DenySendGames,
SendInline: b.DenySendInline,
EmbedLinks: b.DenyEmbedLinks,
SendPolls: b.DenySendPolls,
ChangeInfo: b.DenyChangeInfo,
InviteUsers: b.DenyInviteUsers,
PinMessages: b.DenyPinMessages,
}
if !b.UntilDate.IsZero() {
r.UntilDate = int(b.UntilDate.Unix())
}
r.SetFlags()
return r
}