using System; using System.Linq; using System.Threading.Tasks; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; namespace Kruzya.TelegramBot.UrlLimitations { public static class MessageExtension { public static async Task HasUnknownMention(this Message message, ITelegramBotClient bot) { foreach (var mention in message.Entities.Where(e => e.Type == MessageEntityType.Mention || e.Type == MessageEntityType.TextMention)) { long userId = 0; if (mention.Type == MessageEntityType.TextMention) { userId = mention.User.Id; } else { try { var chat = await bot.GetChatAsync( new ChatId(message.Text.Substring(mention.Offset, mention.Length))); if (chat != null) { if (chat.Type != ChatType.Private) { return true; } userId = Convert.ToInt64(chat.Id); } } catch (Exception) { return true; } } var status = (await bot.GetChatMemberAsync(message.Chat, userId)).Status; if ((new ChatMemberStatus[] { ChatMemberStatus.Administrator, ChatMemberStatus.Creator, ChatMemberStatus.Member, ChatMemberStatus.Restricted // i'm not sure about "Restricted" // maybe leaved members with some restrictions also can be "Restricted". }).Any(e => e == status) == false) { return true; } } return false; } } }