[whois] Add chatmember status to output. Update .gitignore.

This commit is contained in:
West14
2022-01-20 14:28:26 +02:00
parent b1876edf13
commit a8c02184e9
3 changed files with 40 additions and 3 deletions
+2
View File
@@ -7,3 +7,5 @@ obj/
.DS_Store
appsettings.json
Core/Core.csproj.user
Core/appsettings.Development.json
+16 -2
View File
@@ -1,14 +1,19 @@
using System;
#nullable enable
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Extensions.Configuration;
using SQLitePCL;
using Telegram.Bot.Types;
namespace Kruzya.TelegramBot.Core.Service
{
public class UserService
{
private List<long> _superUsers;
private readonly List<long> _superUsers;
private readonly Dictionary<long, string> _statusMap;
public UserService(IConfiguration configuration)
{
@@ -16,6 +21,10 @@ namespace Kruzya.TelegramBot.Core.Service
.GetChildren()
.Select(q => Convert.ToInt64(q.Value))
.ToList();
_statusMap = configuration.GetSection("CustomMemberStatus")
.GetChildren()
.ToDictionary(x => Convert.ToInt64(x.Key), x => x.Value);
}
public bool IsUserSuper(User user)
@@ -27,5 +36,10 @@ namespace Kruzya.TelegramBot.Core.Service
{
return _superUsers.Contains(userId);
}
public string? GetUserCustomStatus(long userId)
{
return _statusMap.ContainsKey(userId) ? _statusMap[userId] : null;
}
}
}
@@ -12,6 +12,7 @@ using Kruzya.TelegramBot.Core.Service;
using Microsoft.Extensions.Logging;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
namespace West.TelegramBot.ChatManagement.Handler
{
@@ -58,6 +59,7 @@ namespace West.TelegramBot.ChatManagement.Handler
}
else
{
message += $"<code>{await GetChatMemberStatusString(user)}</code>\n";
message += $"<code>Репутация: {await GetUserReputation(user)}\n";
message += $"Предупреждения: {(await GetWarnOption(user)).GetValue<int>()}</code>";
}
@@ -156,5 +158,24 @@ namespace West.TelegramBot.ChatManagement.Handler
{
return await Db.UserValues.FindOrCreateOption(Chat.Id, user.Id, "reputation");
}
private async Task<string> GetChatMemberStatusString(User user)
{
var chatMember = await Bot.GetChatMemberAsync(Chat.Id, user.Id);
var customStatus = _userService.GetUserCustomStatus(user.Id);
if (customStatus != null)
{
return customStatus;
}
return chatMember.Status switch
{
ChatMemberStatus.Creator => "Владелец",
ChatMemberStatus.Restricted => "Заблокированный",
ChatMemberStatus.Administrator => "Администратор",
_ => "Пользователь"
};
}
}
}