Skip to content

Commit

Permalink
new feature: forward low-confidence ham to admin chat
Browse files Browse the repository at this point in the history
  • Loading branch information
TiraelSedai committed Sep 15, 2024
1 parent acc4657 commit 3633f5c
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 11 deletions.
17 changes: 9 additions & 8 deletions ClubDoorman/Config.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
{
public static class Config
{
public static bool BlacklistAutoBan { get; } = GetBlacklistAutoBan();
public static bool BlacklistAutoBan { get; } = !GetEnvironmentBool("DOORMAN_BLACKLIST_AUTOBAN_DISABLE");
public static bool LowConfidenceHamForward { get; } = GetEnvironmentBool("DOORMAN_LOW_CONFIDENCE_HAM_ENABLE");
public static string BotApi { get; } =
Environment.GetEnvironmentVariable("DOORMAN_BOT_API") ?? throw new Exception("DOORMAN_BOT_API variable not set");
public static long AdminChatId { get; } =
Expand All @@ -12,16 +13,16 @@ public static class Config
public static string? ClubServiceToken { get; } = Environment.GetEnvironmentVariable("DOORMAN_CLUB_SERVICE_TOKEN");
public static string ClubUrl { get; } = GetClubUrlOrDefault();

private static bool GetBlacklistAutoBan()
private static bool GetEnvironmentBool(string envName)
{
var env = Environment.GetEnvironmentVariable("DOORMAN_BLACKLIST_AUTOBAN_DISABLE");
var env = Environment.GetEnvironmentVariable(envName);
if (env == null)
return true;
if (int.TryParse(env, out var num) && num == 1)
return false;
if (int.TryParse(env, out var num) && num == 1)
return true;
if (bool.TryParse(env, out var b) && b)
return false;
return true;
return true;
return false;
}

private static string GetClubUrlOrDefault()
Expand All @@ -30,7 +31,7 @@ private static string GetClubUrlOrDefault()
if (url == null)
return "https://vas3k.club/";
if (!url.EndsWith('/'))
url = url + '/';
url += '/';
if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
throw new Exception("DOORMAN_CLUB_URL variable is set to invalid URL");
return url;
Expand Down
20 changes: 17 additions & 3 deletions ClubDoorman/Worker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -209,14 +209,28 @@ private async Task HandleUpdate(Update update, CancellationToken stoppingToken)
await DeleteAndReportMessage(message, user, reason, stoppingToken);
return;
}
else
// else - ham
if (score > -1 && Config.LowConfidenceHamForward)
{
logger.LogDebug("Classifier thinks its ham, score {Score}", score);
var forward = await _bot.ForwardMessageAsync(
Config.AdminChatId,
message.Chat.Id,
message.MessageId,
cancellationToken: stoppingToken
);
var postLink = LinkToMessage(message.Chat, message.MessageId);
await _bot.SendTextMessageAsync(
Config.AdminChatId,
$"Классифаер думает что это НЕ спам, но конфиденс низкий: скор {score}. Хорошая идея - добавить сообщение в датасет.{Environment.NewLine}Юзер {FullName(user.FirstName, user.LastName)} из чата {message.Chat.Title}{Environment.NewLine}{postLink}",
replyToMessageId: forward.MessageId,
cancellationToken: stoppingToken
);
}
logger.LogDebug("Classifier thinks its ham, score {Score}", score);

// Now we need a mechanism for users who have been writing non-spam for some time
var goodInteractions = _goodUserMessages.AddOrUpdate(user.Id, 1, (_, oldValue) => oldValue + 1);
if (goodInteractions >= 5)
if (goodInteractions >= 3)
{
logger.LogInformation(
"User {FullName} behaved well for the last {Count} messages, approving",
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
- DOORMAN_CLUB_SERVICE_TOKEN: Сервис токен для Клуба, создаётся тут: https://vas3k.club/apps/. Если переменная не задана, автоматический аппрув людей из Клуба пропускается.
- DOORMAN_CLUB_URL: Базовый URL для форков Клуба, например https://rationalanswer.club/
- DOORMAN_BLACKLIST_AUTOBAN_DISABLE: Установить в true или 1 чтобы бот не банил людей (не из Клуба, не approved, из блеклиста) при заходе сразу
- DOORMAN_LOW_CONFIDENCE_HAM_ENABLE: Установить в true или 1 чтобы отсылать в админку не-спам который имеет низкий конфиденс скор, полезно для чатов где спамеры постоянно проверяют качество ML на прочность

#### Спасибо
- https://lols.bot/ за борьбу со спамерами и API для бан-листов
Expand Down

0 comments on commit 3633f5c

Please sign in to comment.