Skip to content

Roles And Chat Members

TeleFlow supports role requirements and chat member update handlers.

Role Filter

Use [RequireTelegramRole] when a handler should be available only to specific Telegram member statuses:

[Command("admin")]
[RequireTelegramRole(TelegramMemberStatusSet.IsAdmin)]
public Task Admin(MessageContext ctx, CancellationToken ct)
{
    return ctx.Message.AnswerAsync("Admin panel.", ct);
}

Role checks use Telegram member status information. The framework includes resolver and cache services that can be replaced:

builder.Services.AddTelegramChatMemberStatusResolver<MyResolver>();
builder.Services.AddTelegramChatMemberStatusCache<MyCache>();

The default role cache is controlled through bot options:

builder.Services.AddTelegramBot(options =>
{
    options.Token = token;
    options.RoleFilter.CacheEnabled = true;
    options.RoleFilter.CacheTtl = TimeSpan.FromSeconds(30);
});

Use a short TTL for Telegram roles unless your product has a stronger consistency model outside Telegram.

Chat Member Updates

Handle chat member updates:

using TeleFlow.Telegram.Schema.Abstractions;

[ChatMemberUpdated]
[ChatMemberTransition(TelegramMemberTransition.Join)]
public Task UserJoined(ChatMemberUpdatedContext ctx, CancellationToken ct)
{
    return ctx.Bot.SendMessageAsync(
        chatId: IntegerString.From(ctx.TelegramChat.Id),
        text: $"{ctx.Member.FirstName} joined.",
        cancellationToken: ct);
}

Handle bot membership updates:

[MyChatMemberUpdated]
[ChatMemberTransition(TelegramMemberTransition.Promoted)]
public Task BotPromoted(ChatMemberUpdatedContext ctx, CancellationToken ct)
{
    return Task.CompletedTask;
}

Exact Status Changes

Use [ChatMemberChanged] when a specific old/new status pair matters:

[ChatMemberUpdated]
[ChatMemberChanged(
    TelegramMemberStatusSet.IsNotMember,
    TelegramMemberStatusSet.IsMember)]
public Task BecameMember(ChatMemberUpdatedContext ctx, CancellationToken ct)
{
    return Task.CompletedTask;
}

When To Use Roles

Use Telegram role filters for Telegram permissions: admins, creators, members, banned users, or restricted users.

Use your own application authorization service when the rule is about your product: paid plans, tenant access, internal staff roles, or support team ownership.