Files

78 lines
2.4 KiB
C#
Raw Permalink Normal View History

2022-05-05 13:26:17 +03:00
#nullable enable
using System;
using System.Threading.Tasks;
using BotFramework.Abstractions;
using Kruzya.TelegramBot.Core.Data;
using Kruzya.TelegramBot.Core.Extensions;
using Telegram.Bot;
using Telegram.Bot.Types;
namespace West.TelegramBot.ChatManagement.Service;
public class WarnService
{
public delegate void WarnHandler(ITelegramBotClient bot, Chat chat, User from, User to, int count, bool isBanned = false);
public delegate void UnWarnHandler(ITelegramBotClient bot, Chat chat, User from, User to, int count);
public static event WarnHandler? WarnEvent;
public static event UnWarnHandler? UnWarnEvent;
private readonly CoreContext _db;
private readonly ITelegramBotClient _bot;
public WarnService(CoreContext db, IBotInstance bot)
{
_db = db;
_bot = bot.BotClient;
}
public async Task WarnChatUserAsync(Chat chat, User from, User to)
{
var warnOption = await GetWarnOption(chat, to);
var warnCount = warnOption.GetValue<int>() + 1;
if (warnCount >= 3)
{
try
{
2025-02-09 17:40:03 +02:00
await _bot.RestrictChatMember(
2022-05-05 13:26:17 +03:00
chat.Id,
to.Id,
new ChatPermissions
{
CanSendMessages = false
},
2025-02-09 17:40:03 +02:00
untilDate: DateTime.Now.AddDays(7)
2022-05-05 13:26:17 +03:00
);
warnCount = 0;
}
catch
{
2025-02-09 17:40:03 +02:00
await _bot.SendMessage(chat.Id, "У меня нет прав на блокировку пользователя.");
2022-05-05 13:26:17 +03:00
}
}
warnOption.SetValue(warnCount);
_db.AddOrUpdate(warnOption);
WarnEvent?.Invoke(_bot, chat, from, to, warnCount == 0 ? 3 : warnCount, warnCount == 0);
}
public async Task UnWarnChatUserAsync(Chat chat, User from, User user)
{
var warnOption = await GetWarnOption(chat, user);
var warnCount = warnOption.GetValue<int>();
if (warnCount == 0) return;
warnCount = Math.Max(warnCount - 1, 0);
warnOption.SetValue(warnCount);
_db.AddOrUpdate(warnOption);
UnWarnEvent?.Invoke(_bot, chat, from, user, warnCount);
}
protected async Task<BotUserValue> GetWarnOption(Chat chat, User user)
{
return await _db.UserValues.FindOrCreateOption(chat.Id, user.Id, "warnCount");
}
}