[cm] ability to ban user for an arbitrary period

This commit is contained in:
West14
2022-04-23 21:03:33 +03:00
parent 634695d0d8
commit 5b77ef2b85
6 changed files with 66 additions and 24 deletions
+2 -16
View File
@@ -35,21 +35,8 @@ namespace Kruzya.TelegramBot.Core
return RepliedUser != null && await Bot.CanPunishMember(Chat, From, RepliedUser);
}
#region Bans
protected async Task BanMember(User user, DateTime? banEnd = null, bool sendMessage = true)
{
await BanMember(user.Id, banEnd);
if (sendMessage)
{
await Bot.SendTextMessageAsync(
Chat.Id,
$"{From.ToHtml()} <code>заблокировал</code> {user.ToHtml()} <code>на 7 дней</code>",
disableNotification: true, parseMode: ParseMode.Html);
}
}
protected async Task BanMember(long userId, DateTime? banEnd = null)
protected async Task BanMember(long userId, DateTime banEnd)
{
await Bot.RestrictChatMemberAsync(
Chat.Id,
@@ -58,10 +45,9 @@ namespace Kruzya.TelegramBot.Core
{
CanSendMessages = false
},
banEnd ?? DateTime.Now.AddDays(7)
banEnd
);
}
#endregion
protected async Task<BotUserValue> GetWarnOption(User user)
{
+4 -1
View File
@@ -1,5 +1,7 @@
using Kruzya.TelegramBot.Core;
using BotFramework;
using Kruzya.TelegramBot.Core;
using Microsoft.Extensions.DependencyInjection;
using West.TelegramBot.ChatManagement.ParamParser;
using West.TelegramBot.ChatManagement.Service;
namespace West.TelegramBot.ChatManagement;
@@ -13,5 +15,6 @@ public class ChatManagement : Module
public override void ConfigureServices(IServiceCollection services)
{
services.AddScoped<RulesService>();
services.AddTelegramBotParameterParser<BanLength.Param, BanLength.Parser>();
}
}
@@ -10,6 +10,10 @@
<ProjectReference Include="..\..\Core\Core.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="ParamParser\" />
</ItemGroup>
<Target Name="PostBuild" AfterTargets="PostBuildEvent">
<Delete Files="$(OutDir)\TelegramBot.dll" />
</Target>
+23 -5
View File
@@ -1,5 +1,6 @@
#nullable enable
using System;
using System.Threading.Tasks;
using BotFramework.Attributes;
using BotFramework.Enums;
@@ -8,6 +9,8 @@ using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
using Telegram.Bot;
using Telegram.Bot.Types;
using Telegram.Bot.Types.Enums;
using West.TelegramBot.ChatManagement.ParamParser;
namespace West.TelegramBot.ChatManagement.Handler;
@@ -15,18 +18,33 @@ public class Ban : CommonHandler
{
public Ban(CoreContext db) : base(db) {}
[Command("ban", CommandParseMode.Both)]
public async Task HandleBan()
[ParametrizedCommand("ban", CommandParseMode.Both)]
public async Task HandleBan(BanLength.Param banLengthParam)
{
if (!await CanPunish()) return;
if (!await CanPunish())
{
return;
}
var now = DateTime.Now;
var banEnd = now.AddDays(banLengthParam.DayCount);
await BanMember(RepliedUser!);
var banEndMsg = (banEnd - now).Days > 366 ? "навсегда" : $"до {banEnd.ToUniversalTime()}";
await Bot.SendTextMessageAsync(
Chat.Id,
$"{From.ToHtml()} <code>заблокировал</code> {RepliedUser!.ToHtml()} <code>{banEndMsg}</code>",
disableNotification: true, parseMode: ParseMode.Html);
await BanMember(RepliedUser!.Id, banEnd);
}
[Command("unban", CommandParseMode.Both)]
public async Task HandleUnban()
{
if (!await CanPunish()) return;
if (!await CanPunish())
{
return;
}
await Bot.RestrictChatMemberAsync(Chat.Id, RepliedUser!.Id,
new ChatPermissions
+1 -1
View File
@@ -34,7 +34,7 @@ public class Warn : CommonHandler
if (warnCount == 3)
{
await BanMember(warnUser);
await BanMember(warnUser.Id, DateTime.Now.AddDays(7));
warnOption.SetValue(0);
Db.AddOrUpdate(warnOption);
}
@@ -0,0 +1,31 @@
using BotFramework;
using static System.UInt32;
namespace West.TelegramBot.ChatManagement.ParamParser;
public class BanLength
{
public class Param
{
public uint DayCount;
}
public class Parser : IParameterParser<Param>
{
public Param DefaultInstance()
{
return new Param();
}
public bool TryGetValue(string text, out Param result)
{
result = DefaultInstance();
if (!TryParse(text, out result.DayCount))
{
result.DayCount = 7;
}
return true;
}
}
}