Files

34 lines
1.2 KiB
C#

using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace Volcanic.AgenticCore.Telegram.Groups;
/// <summary>Whether a user is in a group: only members may put a trigger on it.</summary>
public interface IGroupMembership
{
Task<bool> IsMemberAsync(long groupId, long userId, CancellationToken cancellationToken);
}
/// <summary><c>getChatMember</c>; any failure (the bot was removed, the user is unknown) counts as not a member.</summary>
public sealed class TelegramGroupMembership(ITelegramBotClient bot) : IGroupMembership
{
public async Task<bool> IsMemberAsync(long groupId, long userId, CancellationToken cancellationToken)
{
try
{
var member = await bot.GetChatMember(groupId, userId, cancellationToken).ConfigureAwait(false);
return member.Status switch
{
ChatMemberStatus.Creator or ChatMemberStatus.Administrator or ChatMemberStatus.Member => true,
ChatMemberStatus.Restricted => member is ChatMemberRestricted { IsMember: true },
_ => false,
};
}
catch (Exception ex) when (ex is not OperationCanceledException)
{
return false;
}
}
}