diff --git a/AntiAntiSwearingBot.Tests/FilterTests.cs b/AntiAntiSwearingBot.Tests/FilterTests.cs index 11ef2a6..b512aca 100644 --- a/AntiAntiSwearingBot.Tests/FilterTests.cs +++ b/AntiAntiSwearingBot.Tests/FilterTests.cs @@ -78,5 +78,13 @@ namespace AntiAntiSwearingBot.Tests [InlineData("#BalıkBurcuKızıylaEvlenmek")] public void IgnoreHashtags(string text) => Assert.Null(ubl.UnbleepSwears(text)); + [Theory] + [InlineData("ipetrov@mail.ru")] + [InlineData("ipetrov@русская.mail.ru")] + [InlineData("ипетров@почта.рф")] + [InlineData("admin@local")] + [InlineData("админ@local")] + public void IgnoreEmails(string text) => Assert.Null(ubl.UnbleepSwears(text)); + } } diff --git a/AntiAntiSwearingBot/Language.cs b/AntiAntiSwearingBot/Language.cs index b4cf7fe..3ad7ded 100644 --- a/AntiAntiSwearingBot/Language.cs +++ b/AntiAntiSwearingBot/Language.cs @@ -57,11 +57,14 @@ namespace AntiAntiSwearingBot => a == b || !char.IsLetterOrDigit(a) || !char.IsLetterOrDigit(b); static readonly Regex MentionRegex = new Regex("^@[a-zA-Z0-9_]+$", RegexOptions.Compiled); + static readonly Regex EmailPartRegex = new Regex("^\\w+@\\w+$", RegexOptions.Compiled); static readonly Regex HashTagRegex = new Regex("^#\\w+$", RegexOptions.Compiled); public static bool IsTelegramMention(string word) => MentionRegex.IsMatch(word); + public static bool IsEmailPart(string word) => EmailPartRegex.IsMatch(word); + public static bool IsHashTag(string word) => HashTagRegex.IsMatch(word); public static bool HasNonWordChars(string arg) => arg.Any(c => !char.IsLetterOrDigit(c)); diff --git a/AntiAntiSwearingBot/Unbleeper.cs b/AntiAntiSwearingBot/Unbleeper.cs index 473ca9e..6e19ac2 100644 --- a/AntiAntiSwearingBot/Unbleeper.cs +++ b/AntiAntiSwearingBot/Unbleeper.cs @@ -36,6 +36,7 @@ namespace AntiAntiSwearingBot var candidates = words .Where(w => !Language.IsTelegramMention(w) + && !Language.IsEmailPart(w) && Language.HasNonWordChars(w) && !Language.IsHashTag(w) && (Language.HasWordChars(w) || w.Length >= Cfg.MinAmbiguousWordLength)