diff --git a/modules/ChatManagement/Handler/Whois.cs b/modules/ChatManagement/Handler/Whois.cs new file mode 100644 index 0000000..2b38905 --- /dev/null +++ b/modules/ChatManagement/Handler/Whois.cs @@ -0,0 +1,67 @@ +#nullable enable +using System; +using System.Threading.Tasks; +using BotFramework.Attributes; +using BotFramework.Enums; +using Kruzya.TelegramBot.Core; +using Kruzya.TelegramBot.Core.Data; +using Kruzya.TelegramBot.Core.Extensions; +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 => "Администратор", + _ => "Пользователь" + }; + } +} \ No newline at end of file diff --git a/modules/Reputation/Handler/Reputation.cs b/modules/Reputation/Handler/Reputation.cs index 28cb0be..71451a0 100644 --- a/modules/Reputation/Handler/Reputation.cs +++ b/modules/Reputation/Handler/Reputation.cs @@ -8,9 +8,7 @@ using Kruzya.TelegramBot.Core.Data; using Kruzya.TelegramBot.Core.Extensions; using Kruzya.TelegramBot.Core.Service; using Microsoft.Extensions.Logging; -using Telegram.Bot; using Telegram.Bot.Types; -using Telegram.Bot.Types.Enums; namespace West.TelegramBot.Reputation.Handler; @@ -53,25 +51,6 @@ public class Reputation : CommonHandler _logger = logger; } - [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"; - message += $"Репутация: {await GetUserReputation(user)}\n"; - message += $"Предупреждения: {(await GetWarnOption(user)).GetValue()}"; - } - - await Reply(message); - } - [Message(InChat.Public, MessageFlag.HasText | MessageFlag.HasSticker)] public async Task HandleReputation() { @@ -154,22 +133,4 @@ public class Reputation : CommonHandler { return await _reputationService.GetUserReputationAsync(Chat, user); } - - 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 => "Администратор", - _ => "Пользователь" - }; - } } \ No newline at end of file