#nullable enable using System; using System.Threading.Tasks; using BotFramework.Attributes; using BotFramework.Enums; using Kruzya.TelegramBot.Core.Data; using Kruzya.TelegramBot.Core.Extensions; using Kruzya.TelegramBot.Core.Handler; using Kruzya.TelegramBot.Core.Service; using Microsoft.Extensions.DependencyInjection; using Telegram.Bot; using Telegram.Bot.Types; using Telegram.Bot.Types.Enums; namespace West.TelegramBot.ChatManagement.Handler; public class WhoIs : CommonHandler { private readonly IReputation? _reputation; private readonly UserService _userService; public WhoIs(CoreContext db, UserService userService, IServiceProvider provider) : base(db) { _reputation = provider.GetService(); _userService = userService; } [Command("whois", CommandParseMode.Both)] public async Task HandleWhoIs() { var user = RepliedUser ?? From; var message = $"{user.ToHtml()}\n"; if (user.IsBot) { message += "Бот"; } else { message += $"{await GetChatMemberStatusString(user)}\n"; if (_reputation != null) { message += $"Репутация: {await _reputation.GetUserReputationAsync(Chat, user)}\n"; } message += $"Предупреждения: {(await GetWarnOption(user)).GetValue()}"; } await Reply(message); } private async Task GetChatMemberStatusString(User user) { var customStatus = _userService.GetUserCustomStatus(user.Id); if (customStatus != null) { return customStatus; } var chatMember = await Bot.GetChatMemberAsync(Chat.Id, user.Id); return chatMember.Status switch { ChatMemberStatus.Creator => "Владелец", ChatMemberStatus.Restricted => "Заблокированный", ChatMemberStatus.Administrator => "Администратор", _ => "Пользователь" }; } }