Initial QMAX production app
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
namespace QMax.Api.Services;
|
||||
|
||||
public static class MessageTextSanitizer
|
||||
{
|
||||
public static string? CleanChatPreview(string? value)
|
||||
{
|
||||
if (IsGenericMediaLabel(value))
|
||||
{
|
||||
return "\u041c\u0435\u0434\u0438\u0430";
|
||||
}
|
||||
|
||||
return IsQuestionMarkArtifact(value)
|
||||
? "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435"
|
||||
: value;
|
||||
}
|
||||
|
||||
public static string? CleanMessageText(string? value, bool hasAttachments)
|
||||
{
|
||||
if (hasAttachments && IsGenericAttachmentLabel(value))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!IsQuestionMarkArtifact(value))
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
return hasAttachments
|
||||
? null
|
||||
: "\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435";
|
||||
}
|
||||
|
||||
public static bool IsGenericMediaLabel(string? value)
|
||||
{
|
||||
return value?.Trim().ToLowerInvariant() switch
|
||||
{
|
||||
"\u0444\u043e\u0442\u043e" => true,
|
||||
"photo" => true,
|
||||
"image" => true,
|
||||
"gif" => true,
|
||||
"\u0432\u0438\u0434\u0435\u043e" => true,
|
||||
"video" => true,
|
||||
"\u0430\u0443\u0434\u0438\u043e" => true,
|
||||
"audio" => true,
|
||||
"\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0435" => true,
|
||||
"voice" => true,
|
||||
"\u0441\u0442\u0438\u043a\u0435\u0440" => true,
|
||||
"sticker" => true,
|
||||
"\u044d\u043c\u043e\u0434\u0437\u0438" => true,
|
||||
"emoji" => true,
|
||||
"\u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u044b\u0435 \u0444\u043e\u0442\u043e" => true,
|
||||
"\u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u0435 \u0444\u043e\u0442\u043e" => true,
|
||||
"attached photos" => true,
|
||||
_ => false
|
||||
};
|
||||
}
|
||||
|
||||
public static bool IsGenericAttachmentLabel(string? value)
|
||||
{
|
||||
if (IsGenericMediaLabel(value))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
return value?.Trim().ToLowerInvariant() switch
|
||||
{
|
||||
"\u0441\u043a\u0430\u0447\u0430\u0442\u044c" => true,
|
||||
"download" => true,
|
||||
"\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c" => true,
|
||||
"file" => true,
|
||||
"\u0444\u0430\u0439\u043b" => true,
|
||||
"document" => true,
|
||||
"\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442" => true,
|
||||
"contact" => true,
|
||||
"\u043a\u043e\u043d\u0442\u0430\u043a\u0442" => true,
|
||||
_ => false
|
||||
};
|
||||
}
|
||||
|
||||
public static bool IsQuestionMarkArtifact(string? value)
|
||||
{
|
||||
var text = value?.Trim();
|
||||
if (string.IsNullOrWhiteSpace(text))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var questionMarks = text.Count(c => c is '?' or '\uFFFD');
|
||||
if (questionMarks < 4)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var meaningfulCharacters = text.Count(c => char.IsLetterOrDigit(c) && c != '?');
|
||||
return meaningfulCharacters == 0;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user