private async Task FuncAntiSpamResult(AntiSpamResult result) { var userId = result.UserId; if (result.IsAnyBanned) { Log.Debug("Kicking User Id '{UserId}' because FBan", userId); await Bot.KickChatMemberAsync(Chat.Id, userId); } }
/// <summary> /// Checks the spam. /// </summary> /// <param name="chatId"></param> /// <param name="userId">The user id.</param> /// <param name="funcAntiSpamResult"></param> /// <returns>A Task.</returns> public async Task <AntiSpamResult> CheckSpam( long chatId, long userId, Func <AntiSpamResult, Task> funcAntiSpamResult = null ) { var spamResult = new AntiSpamResult { UserId = userId }; var isIgnored = _chatService.CheckUserIdIgnored(userId); if (isIgnored) { return(spamResult); } _chatSetting = await _settingsService.GetSettingsByGroup(chatId); var getChatMemberTask = _chatService.GetChatMemberAsync(chatId, userId); var checkSpamWatchTask = CheckSpamWatch(userId); var checkCasBanTask = CheckCasBan(userId); var checkEs2BanTask = CheckEs2Ban(userId); await Task.WhenAll( checkSpamWatchTask, checkCasBanTask, checkEs2BanTask, getChatMemberTask ); var chatMember = getChatMemberTask.Result; var swBan = checkSpamWatchTask.Result; var casBan = checkCasBanTask.Result; var es2Ban = checkEs2BanTask.Result; var anyBan = swBan || casBan || es2Ban; if (!anyBan) { Log.Information("UserId {UserId} is passed on all Fed Ban", userId); return(spamResult); } var banMessage = _localizationService.GetLoc( langCode: _chatSetting.LanguageCode, enumPath: GlobalBan.BanMessage, placeHolders: new List <(string placeholder, string value)>() { ("UserId", userId.ToString()), ("FullName", chatMember.User.GetNameLink()) } ); var htmlMessage = HtmlMessage.Empty .TextBr(banMessage); if (es2Ban) { htmlMessage.Url("https://t.me/WinTenDev", "- ES2 Global Ban").Br(); } if (casBan) { htmlMessage.Url($"https://cas.chat/query?u={userId}", "- CAS Fed").Br(); } if (swBan) { htmlMessage.Url("https://t.me/SpamWatchSupport", "- SpamWatch Fed"); } spamResult = new AntiSpamResult() { MessageResult = htmlMessage.ToString(), IsAnyBanned = anyBan, IsEs2Banned = es2Ban, IsCasBanned = casBan, IsSpamWatched = swBan }; if (funcAntiSpamResult != null) { await funcAntiSpamResult(spamResult); } Log.Debug("AntiSpam Result {@Result}", spamResult); return(spamResult); }
public static async Task <AntiSpamResult> AntiSpamCheckAsync(this TelegramService telegramService) { var fromId = telegramService.FromId; var chatId = telegramService.ChatId; var defaultResult = new AntiSpamResult { UserId = fromId, MessageResult = string.Empty, IsAnyBanned = false, IsEs2Banned = false, IsCasBanned = false, IsSpamWatched = false }; if (telegramService.IsPrivateChat || telegramService.MessageOrEdited == null || telegramService.CheckFromAnonymous() || telegramService.CheckSenderChannel()) { return(defaultResult); } if (await telegramService.CheckFromAdminOrAnonymous()) { return(defaultResult); } var message = telegramService.MessageOrEdited; var antiSpamResult = await telegramService.AntiSpamService.CheckSpam(chatId, fromId); if (antiSpamResult == null) { return(null); } var messageBan = antiSpamResult.MessageResult; if (!antiSpamResult.IsAnyBanned) { return(antiSpamResult); } await Task.WhenAll( telegramService.KickMemberAsync( userId: fromId, unban: false, untilDate: DateTime.Now.AddMinutes(1) ), telegramService.SendTextMessageAsync( sendText: messageBan, replyToMsgId: 0, disableWebPreview: true, scheduleDeleteAt: DateTime.UtcNow.AddDays(1), preventDuplicateSend: true, messageFlag: MessageFlag.GBan ), telegramService.EventLogService.SendEventLogAsync( text: messageBan, chatId: chatId, message: message, messageFlag: MessageFlag.GBan, forwardMessageId: message.MessageId, deleteForwardedMessage: true ) ); await telegramService.DeleteMessageManyAsync(); return(antiSpamResult); }