Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Admin & Ban Rights

ferogram provides two fluent builders for granular admin and ban rights: AdminRightsBuilder and BannedRightsBuilder: both in the ferogram::participants module.


BannedRightsBuilder: restrict a member

#![allow(unused)]
fn main() {
use ferogram::participants::BannedRightsBuilder;

// Permanent full ban
client
    .ban_participant(peer.clone(), user_id, BannedRightsBuilder::full_ban())
    .await?;

// Partial restriction (no media, expires in 24 h)
let tomorrow = (std::time::SystemTime::now()
    .duration_since(std::time::UNIX_EPOCH).unwrap().as_secs() + 86400) as i32;

client
    .ban_participant(
        peer.clone(), user_id,
        BannedRightsBuilder::new()
            .send_media(true)
            .send_stickers(true)
            .send_gifs(true)
            .until_date(tomorrow),
    )
    .await?;

// Unban
// Passing an empty builder restores full permissions
client
    .ban_participant(peer.clone(), user_id, BannedRightsBuilder::new())
    .await?;
}

Method reference

MethodDefaultDescription
BannedRightsBuilder::new()all falseNo restrictions (use to unban)
BannedRightsBuilder::full_ban()all true, until_date = 0Total permanent ban
.view_messages(bool)falseBlock reading messages
.send_messages(bool)falseBlock sending text
.send_media(bool)falseBlock sending media
.send_stickers(bool)falseBlock stickers
.send_gifs(bool)falseBlock GIFs
.send_games(bool)falseBlock games
.send_inline(bool)falseBlock inline bots
.embed_links(bool)falseBlock link embeds
.send_polls(bool)falseBlock polls
.change_info(bool)falseBlock changing chat info
.invite_users(bool)falseBlock inviting users
.pin_messages(bool)falseBlock pinning messages
.until_date(ts: i32)0Expiry Unix timestamp (0 = permanent)

Note: Setting view_messages: true is a full ban: the member cannot read messages or remain in the group.


AdminRightsBuilder: grant admin rights

#![allow(unused)]
fn main() {
use ferogram::participants::AdminRightsBuilder;

// Custom moderator
client
    .promote_participant(
        peer.clone(), user_id,
        AdminRightsBuilder::new()
            .delete_messages(true)
            .ban_users(true)
            .invite_users(true)
            .pin_messages(true)
            .rank("Moderator"),  // shown next to name
    )
    .await?;

// Full admin (all standard rights)
client
    .promote_participant(peer.clone(), user_id, AdminRightsBuilder::full_admin())
    .await?;

// Demote (remove all admin rights)
client
    .promote_participant(peer.clone(), user_id, AdminRightsBuilder::new())
    .await?;
}

Method reference

MethodDefaultDescription
AdminRightsBuilder::new()all falseNo rights (use to demote)
AdminRightsBuilder::full_admin()standard setAll rights except add_admins
.change_info(bool)falseCan edit channel/group info & photo
.post_messages(bool)falseCan post in broadcast channels
.edit_messages(bool)falseCan edit other users’ messages
.delete_messages(bool)falseCan delete any message
.ban_users(bool)falseCan restrict / ban members
.invite_users(bool)falseCan add new members
.pin_messages(bool)falseCan pin messages
.add_admins(bool)falseCan promote others to admin ⚠️
.anonymous(bool)falsePosts appear as channel name
.manage_call(bool)falseCan start/manage voice chats
.manage_topics(bool)falseCan create/edit/delete forum topics
.rank(str)NoneCustom admin title (max 16 chars)

.add_admins(true) grants significant trust: admins with this right can promote others to full admin level.


ParticipantPermissions: read effective rights

To inspect the actual current permissions of a user in a channel:

#![allow(unused)]
fn main() {
use ferogram::participants::ParticipantPermissions;

let perms: ParticipantPermissions = client
    .get_permissions(peer.clone(), user_id)
    .await?;
}

Fields & methods

SymbolTypeDescription
is_creator()boolIs the creator
is_admin()boolHas any admin rights
is_banned()boolIs banned or restricted
is_member()boolActive member (!is_banned && !is_left)
can_send_messagesboolCan send text
can_send_mediaboolCan send media
can_pin_messagesboolCan pin messages
can_add_adminsboolCan promote others
admin_rankOption<String>Custom admin title

Quick patterns

#![allow(unused)]
fn main() {
// Temporarily mute: no messages for 1 hour
let in_1h = (chrono::Utc::now().timestamp() + 3600) as i32;
client.ban_participant(peer.clone(), uid,
    BannedRightsBuilder::new().send_messages(true).until_date(in_1h)
).await?;

// Promote to channel editor
client.promote_participant(peer.clone(), uid,
    AdminRightsBuilder::new()
        .post_messages(true)
        .edit_messages(true)
        .delete_messages(true)
).await?;

// Check before acting
let perms = client.get_permissions(peer.clone(), uid).await?;
if !perms.is_admin() && !perms.is_banned() {
    client.ban_participant(peer.clone(), uid, BannedRightsBuilder::full_ban()).await?;
}
}