Files

67 lines
2.1 KiB
C#
Raw Permalink Normal View History

#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<IReputation>();
_userService = userService;
}
[Command("whois", CommandParseMode.Both)]
public async Task HandleWhoIs()
{
var user = RepliedUser ?? From;
var message = $"{user.ToHtml()}\n";
if (user.IsBot)
{
message += "<code>Бот</code>";
}
else
{
message += $"<code>{await GetChatMemberStatusString(user)}</code>\n";
if (_reputation != null)
{
message += $"<code>Репутация: {await _reputation.GetUserReputationAsync(Chat, user)}\n</code>";
}
message += $"<code>Предупреждения: {(await GetWarnOption(user)).GetValue<int>()}</code>";
}
await Reply(message);
}
private async Task<string> 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 => "Администратор",
_ => "Пользователь"
};
}
}