server-master/srcs/_plugins/WingsEmu.Plugins.BasicImplementation/ForbiddenNames/ReloadableForbiddenNamesManager.cs
2026-02-10 18:21:30 +01:00

44 lines
No EOL
1.3 KiB
C#

using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using WingsAPI.Communication;
using WingsAPI.Communication.Translations;
using WingsEmu.Game.Managers;
namespace WingsEmu.Plugins.BasicImplementations.ForbiddenNames;
public class ReloadableForbiddenNamesManager : IForbiddenNamesManager
{
private readonly ITranslationService _translationService;
private List<string> _bannedNames = new();
public ReloadableForbiddenNamesManager(ITranslationService translationService) => _translationService = translationService;
public bool IsBanned(string name, out string s)
{
string lowerCharName = name.ToLowerInvariant();
// shallow copy reference
List<string> scopedBannedNames = _bannedNames;
foreach (string bannedName in scopedBannedNames)
{
if (!lowerCharName.Contains(bannedName))
{
continue;
}
s = bannedName;
return true;
}
s = string.Empty;
return false;
}
public async Task Reload()
{
GetForbiddenWordsResponse response = await _translationService.GetForbiddenWords(new EmptyRpcRequest());
Interlocked.Exchange(ref _bannedNames, response.ForbiddenWords?.ToList() ?? new List<string>());
}
}