feat: add NoSoliciting Lite
This commit is contained in:
parent
fe2e9bdc14
commit
458b22f4f3
|
@ -0,0 +1,24 @@
|
|||
using System;
|
||||
using Dalamud.Game.Command;
|
||||
|
||||
namespace NoSoliciting.Lite {
|
||||
public class Commands : IDisposable {
|
||||
private Plugin Plugin { get; }
|
||||
|
||||
internal Commands(Plugin plugin) {
|
||||
this.Plugin = plugin;
|
||||
|
||||
this.Plugin.Interface.CommandManager.AddHandler("/nolite", new CommandInfo(this.OnCommand) {
|
||||
HelpMessage = "Open the NoSol Lite config",
|
||||
});
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
this.Plugin.Interface.CommandManager.RemoveHandler("/nolite");
|
||||
}
|
||||
|
||||
private void OnCommand(string command, string args) {
|
||||
this.Plugin.Ui.ToggleConfig();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,58 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text.RegularExpressions;
|
||||
using Dalamud.Configuration;
|
||||
using Dalamud.Plugin;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace NoSoliciting.Lite {
|
||||
[Serializable]
|
||||
internal class Configuration : IPluginConfiguration {
|
||||
private DalamudPluginInterface Interface { get; set; } = null!;
|
||||
|
||||
public int Version { get; set; } = 1;
|
||||
|
||||
public bool CustomChatFilter { get; set; }
|
||||
public List<string> ChatSubstrings { get; } = new();
|
||||
public List<string> ChatRegexes { get; } = new();
|
||||
|
||||
[JsonIgnore]
|
||||
public List<Regex> CompiledChatRegexes { get; private set; } = new();
|
||||
|
||||
public bool CustomPFFilter { get; set; }
|
||||
public List<string> PFSubstrings { get; } = new();
|
||||
public List<string> PFRegexes { get; } = new();
|
||||
|
||||
[JsonIgnore]
|
||||
public List<Regex> CompiledPfRegexes { get; private set; } = new();
|
||||
|
||||
public bool LogFilteredPfs { get; set; } = true;
|
||||
public bool LogFilteredChat { get; set; } = true;
|
||||
|
||||
public bool ConsiderPrivatePfs { get; set; }
|
||||
|
||||
public IEnumerable<string> ValidChatSubstrings => this.ChatSubstrings.Where(needle => !string.IsNullOrWhiteSpace(needle));
|
||||
public IEnumerable<string> ValidPfSubstrings => this.PFSubstrings.Where(needle => !string.IsNullOrWhiteSpace(needle));
|
||||
|
||||
public void Initialise(DalamudPluginInterface pi) {
|
||||
this.Interface = pi;
|
||||
this.CompileRegexes();
|
||||
}
|
||||
|
||||
public void Save() {
|
||||
this.Interface.SavePluginConfig(this);
|
||||
}
|
||||
|
||||
public void CompileRegexes() {
|
||||
this.CompiledChatRegexes = this.ChatRegexes
|
||||
.Where(reg => !string.IsNullOrWhiteSpace(reg))
|
||||
.Select(reg => new Regex(reg, RegexOptions.Compiled))
|
||||
.ToList();
|
||||
this.CompiledPfRegexes = this.PFRegexes
|
||||
.Where(reg => !string.IsNullOrWhiteSpace(reg))
|
||||
.Select(reg => new Regex(reg, RegexOptions.Compiled))
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
using System.Globalization;
|
||||
|
||||
namespace NoSoliciting.Lite {
|
||||
internal static class Extensions {
|
||||
internal static bool ContainsIgnoreCase(this string haystack, string needle) {
|
||||
return CultureInfo.InvariantCulture.CompareInfo.IndexOf(haystack, needle, CompareOptions.IgnoreCase) >= 0;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
using System;
|
||||
using System.Linq;
|
||||
using Dalamud.Game.Internal.Gui;
|
||||
using Dalamud.Game.Internal.Gui.Structs;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Plugin;
|
||||
|
||||
namespace NoSoliciting.Lite {
|
||||
public class Filter : IDisposable {
|
||||
private Plugin Plugin { get; }
|
||||
|
||||
internal Filter(Plugin plugin) {
|
||||
this.Plugin = plugin;
|
||||
|
||||
this.Plugin.Interface.Framework.Gui.Chat.OnChatMessage += this.OnChat;
|
||||
this.Plugin.Interface.Framework.Gui.PartyFinder.ReceiveListing += this.ReceiveListing;
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
this.Plugin.Interface.Framework.Gui.PartyFinder.ReceiveListing -= this.ReceiveListing;
|
||||
this.Plugin.Interface.Framework.Gui.Chat.OnChatMessage -= this.OnChat;
|
||||
}
|
||||
|
||||
private void OnChat(XivChatType type, uint senderId, ref SeString sender, ref SeString message, ref bool isHandled) {
|
||||
if (isHandled) {
|
||||
return;
|
||||
}
|
||||
|
||||
var text = message.TextValue;
|
||||
|
||||
isHandled = this.Plugin.Config.ValidChatSubstrings.Any(needle => text.ContainsIgnoreCase(needle))
|
||||
|| this.Plugin.Config.CompiledChatRegexes.Any(needle => needle.IsMatch(text));
|
||||
|
||||
if (this.Plugin.Config.LogFilteredChat && isHandled) {
|
||||
PluginLog.Log($"Filtered chat message: {text}");
|
||||
}
|
||||
}
|
||||
|
||||
private void ReceiveListing(PartyFinderListing listing, PartyFinderListingEventArgs args) {
|
||||
if (!args.Visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (listing[SearchAreaFlags.Private] && !this.Plugin.Config.ConsiderPrivatePfs) {
|
||||
return;
|
||||
}
|
||||
|
||||
var text = listing.Description.TextValue;
|
||||
|
||||
args.Visible = !(this.Plugin.Config.ValidPfSubstrings.Any(needle => text.ContainsIgnoreCase(needle))
|
||||
|| this.Plugin.Config.CompiledPfRegexes.Any(needle => needle.IsMatch(text)));
|
||||
|
||||
if (this.Plugin.Config.LogFilteredPfs && !args.Visible) {
|
||||
PluginLog.Log($"Filtered PF: {text}");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||
<ResourcesMerge/>
|
||||
</Weavers>
|
|
@ -0,0 +1,43 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net48</TargetFramework>
|
||||
<Version>1.0.0</Version>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Dalamud">
|
||||
<HintPath>$(AppData)\XIVLauncher\addon\Hooks\dev\Dalamud.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="ImGui.NET">
|
||||
<HintPath>$(AppData)\XIVLauncher\addon\Hooks\dev\ImGui.NET.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="ImGuiScene">
|
||||
<HintPath>$(AppData)\XIVLauncher\addon\Hooks\dev\ImGuiScene.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>$(AppData)\XIVLauncher\addon\Hooks\dev\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>False</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<EmbeddedResource Update="Resources\Language.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Language.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Update="Resources\Language.Designer.cs">
|
||||
<DesignTime>True</DesignTime>
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Language.resx</DependentUpon>
|
||||
</Compile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Fody" Version="6.5.1" PrivateAssets="all" />
|
||||
<PackageReference Include="ResourcesMerge.Fody" Version="1.0.1" PrivateAssets="all" />
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,42 @@
|
|||
using System.Globalization;
|
||||
using Dalamud.Plugin;
|
||||
using NoSoliciting.Lite.Resources;
|
||||
|
||||
namespace NoSoliciting.Lite {
|
||||
// ReSharper disable once ClassNeverInstantiated.Global
|
||||
public class Plugin : IDalamudPlugin {
|
||||
public string Name => "NoSoliciting Lite";
|
||||
|
||||
internal DalamudPluginInterface Interface { get; private set; } = null!;
|
||||
internal Configuration Config { get; private set; } = null!;
|
||||
internal PluginUi Ui { get; private set; } = null!;
|
||||
private Commands Commands { get; set; } = null!;
|
||||
private Filter Filter { get; set; } = null!;
|
||||
|
||||
public void Initialize(DalamudPluginInterface pluginInterface) {
|
||||
this.Interface = pluginInterface;
|
||||
|
||||
this.ConfigureLanguage();
|
||||
this.Interface.OnLanguageChanged += this.ConfigureLanguage;
|
||||
|
||||
this.Config = this.Interface.GetPluginConfig() as Configuration ?? new Configuration();
|
||||
this.Config.Initialise(this.Interface);
|
||||
|
||||
this.Filter = new Filter(this);
|
||||
this.Ui = new PluginUi(this);
|
||||
this.Commands = new Commands(this);
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
this.Commands.Dispose();
|
||||
this.Ui.Dispose();
|
||||
this.Filter.Dispose();
|
||||
this.Interface.OnLanguageChanged -= this.ConfigureLanguage;
|
||||
}
|
||||
|
||||
private void ConfigureLanguage(string? langCode = null) {
|
||||
langCode ??= this.Interface.UiLanguage;
|
||||
Language.Culture = new CultureInfo(langCode ?? "en");
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,170 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Numerics;
|
||||
using System.Text.RegularExpressions;
|
||||
using Dalamud.Interface;
|
||||
using ImGuiNET;
|
||||
using NoSoliciting.Lite.Resources;
|
||||
|
||||
namespace NoSoliciting.Lite {
|
||||
public class PluginUi : IDisposable {
|
||||
private Plugin Plugin { get; }
|
||||
|
||||
private bool _showWindow;
|
||||
|
||||
internal PluginUi(Plugin plugin) {
|
||||
this.Plugin = plugin;
|
||||
|
||||
this.Plugin.Interface.UiBuilder.OnBuildUi += this.Draw;
|
||||
this.Plugin.Interface.UiBuilder.OnOpenConfigUi += this.ToggleConfig;
|
||||
}
|
||||
|
||||
public void Dispose() {
|
||||
this.Plugin.Interface.UiBuilder.OnOpenConfigUi -= this.ToggleConfig;
|
||||
this.Plugin.Interface.UiBuilder.OnBuildUi -= this.Draw;
|
||||
}
|
||||
|
||||
internal void ToggleConfig(object? sender = null, object? args = null) {
|
||||
this._showWindow = !this._showWindow;
|
||||
}
|
||||
|
||||
private void Draw() {
|
||||
if (!this._showWindow) {
|
||||
return;
|
||||
}
|
||||
|
||||
ImGui.SetNextWindowSize(new Vector2(550, 350), ImGuiCond.FirstUseEver);
|
||||
|
||||
var windowTitle = string.Format(Language.Settings, this.Plugin.Name);
|
||||
if (!ImGui.Begin($"{windowTitle}###nosol-lite-settings", ref this._showWindow)) {
|
||||
ImGui.End();
|
||||
return;
|
||||
}
|
||||
|
||||
var shouldSave = false;
|
||||
|
||||
if (ImGui.BeginTabBar("nosol-lite-tabs")) {
|
||||
if (ImGui.BeginTabItem("Chat")) {
|
||||
var customChat = this.Plugin.Config.CustomChatFilter;
|
||||
if (ImGui.Checkbox(Language.EnableCustomChatFilters, ref customChat)) {
|
||||
this.Plugin.Config.CustomChatFilter = customChat;
|
||||
shouldSave = true;
|
||||
}
|
||||
|
||||
if (this.Plugin.Config.CustomChatFilter) {
|
||||
var substrings = this.Plugin.Config.ChatSubstrings;
|
||||
var regexes = this.Plugin.Config.ChatRegexes;
|
||||
this.DrawCustom("chat", ref shouldSave, ref substrings, ref regexes);
|
||||
}
|
||||
|
||||
ImGui.EndTabItem();
|
||||
}
|
||||
|
||||
if (ImGui.BeginTabItem("Party Finder")) {
|
||||
var considerPrivate = this.Plugin.Config.ConsiderPrivatePfs;
|
||||
if (ImGui.Checkbox(Language.FilterPrivatePfs, ref considerPrivate)) {
|
||||
this.Plugin.Config.ConsiderPrivatePfs = considerPrivate;
|
||||
shouldSave = true;
|
||||
}
|
||||
|
||||
var customPf = this.Plugin.Config.CustomPFFilter;
|
||||
if (ImGui.Checkbox(Language.EnableCustomPartyFinderFilters, ref customPf)) {
|
||||
this.Plugin.Config.CustomPFFilter = customPf;
|
||||
shouldSave = true;
|
||||
}
|
||||
|
||||
if (this.Plugin.Config.CustomPFFilter) {
|
||||
var substrings = this.Plugin.Config.PFSubstrings;
|
||||
var regexes = this.Plugin.Config.PFRegexes;
|
||||
this.DrawCustom("pf", ref shouldSave, ref substrings, ref regexes);
|
||||
}
|
||||
|
||||
ImGui.EndTabItem();
|
||||
}
|
||||
|
||||
ImGui.EndTabBar();
|
||||
}
|
||||
|
||||
ImGui.End();
|
||||
|
||||
if (!shouldSave) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.Plugin.Config.Save();
|
||||
this.Plugin.Config.CompileRegexes();
|
||||
}
|
||||
|
||||
private void DrawCustom(string name, ref bool shouldSave, ref List<string> substrings, ref List<string> regexes) {
|
||||
ImGui.Columns(2);
|
||||
|
||||
ImGui.TextUnformatted(Language.SubstringsToFilter);
|
||||
if (ImGui.BeginChild($"##{name}-substrings", new Vector2(0, 175))) {
|
||||
for (var i = 0; i < substrings.Count; i++) {
|
||||
var input = substrings[i];
|
||||
if (ImGui.InputText($"##{name}-substring-{i}", ref input, 1_000)) {
|
||||
substrings[i] = input;
|
||||
shouldSave = true;
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
ImGui.PushFont(UiBuilder.IconFont);
|
||||
if (ImGui.Button($"{FontAwesomeIcon.Trash.ToIconString()}##{name}-substring-{i}-remove")) {
|
||||
substrings.RemoveAt(i);
|
||||
shouldSave = true;
|
||||
}
|
||||
|
||||
ImGui.PopFont();
|
||||
}
|
||||
|
||||
ImGui.PushFont(UiBuilder.IconFont);
|
||||
if (ImGui.Button($"{FontAwesomeIcon.Plus.ToIconString()}##{name}-substring-add")) {
|
||||
substrings.Add("");
|
||||
}
|
||||
|
||||
ImGui.PopFont();
|
||||
|
||||
ImGui.EndChild();
|
||||
}
|
||||
|
||||
ImGui.NextColumn();
|
||||
|
||||
ImGui.TextUnformatted(Language.RegularExpressionsToFilter);
|
||||
if (ImGui.BeginChild($"##{name}-regexes", new Vector2(0, 175))) {
|
||||
for (var i = 0; i < regexes.Count; i++) {
|
||||
var input = regexes[i];
|
||||
if (ImGui.InputText($"##{name}-regex-{i}", ref input, 1_000)) {
|
||||
try {
|
||||
_ = new Regex(input);
|
||||
// update if valid
|
||||
regexes[i] = input;
|
||||
shouldSave = true;
|
||||
} catch (ArgumentException) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
ImGui.PushFont(UiBuilder.IconFont);
|
||||
if (ImGui.Button($"{FontAwesomeIcon.Trash.ToIconString()}##{name}-regex-{i}-remove")) {
|
||||
regexes.RemoveAt(i);
|
||||
shouldSave = true;
|
||||
}
|
||||
|
||||
ImGui.PopFont();
|
||||
}
|
||||
|
||||
ImGui.PushFont(UiBuilder.IconFont);
|
||||
if (ImGui.Button($"{FontAwesomeIcon.Plus.ToIconString()}##{name}-regex-add")) {
|
||||
regexes.Add("");
|
||||
}
|
||||
|
||||
ImGui.PopFont();
|
||||
|
||||
ImGui.EndChild();
|
||||
}
|
||||
|
||||
ImGui.Columns(1);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,117 @@
|
|||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
// Runtime Version:4.0.30319.42000
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace NoSoliciting.Lite.Resources {
|
||||
using System;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// A strongly-typed resource class, for looking up localized strings, etc.
|
||||
/// </summary>
|
||||
// This class was auto-generated by the StronglyTypedResourceBuilder
|
||||
// class via a tool like ResGen or Visual Studio.
|
||||
// To add or remove a member, edit your .ResX file then rerun ResGen
|
||||
// with the /str option, or rebuild your VS project.
|
||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
|
||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||
internal class Language {
|
||||
|
||||
private static global::System.Resources.ResourceManager resourceMan;
|
||||
|
||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||
|
||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||
internal Language() {
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns the cached ResourceManager instance used by this class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||
get {
|
||||
if (object.ReferenceEquals(resourceMan, null)) {
|
||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("NoSoliciting.Lite.Resources.Language", typeof(Language).Assembly);
|
||||
resourceMan = temp;
|
||||
}
|
||||
return resourceMan;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Overrides the current thread's CurrentUICulture property for all
|
||||
/// resource lookups using this strongly typed resource class.
|
||||
/// </summary>
|
||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||
internal static global::System.Globalization.CultureInfo Culture {
|
||||
get {
|
||||
return resourceCulture;
|
||||
}
|
||||
set {
|
||||
resourceCulture = value;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enable custom chat filters.
|
||||
/// </summary>
|
||||
internal static string EnableCustomChatFilters {
|
||||
get {
|
||||
return ResourceManager.GetString("EnableCustomChatFilters", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Enable custom Party Finder filters.
|
||||
/// </summary>
|
||||
internal static string EnableCustomPartyFinderFilters {
|
||||
get {
|
||||
return ResourceManager.GetString("EnableCustomPartyFinderFilters", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Apply filters to private Party Finder listings.
|
||||
/// </summary>
|
||||
internal static string FilterPrivatePfs {
|
||||
get {
|
||||
return ResourceManager.GetString("FilterPrivatePfs", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Regular expressions to filter.
|
||||
/// </summary>
|
||||
internal static string RegularExpressionsToFilter {
|
||||
get {
|
||||
return ResourceManager.GetString("RegularExpressionsToFilter", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to {0} settings.
|
||||
/// </summary>
|
||||
internal static string Settings {
|
||||
get {
|
||||
return ResourceManager.GetString("Settings", resourceCulture);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Looks up a localized string similar to Substrings to filter.
|
||||
/// </summary>
|
||||
internal static string SubstringsToFilter {
|
||||
get {
|
||||
return ResourceManager.GetString("SubstringsToFilter", resourceCulture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>Benutzerdefinierte Chat Filter aktivieren</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>Benutzerdefinierte Gruppensuche Filter aktivieren</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>Filter auf private Gruppensuchen anwenden</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>zu filternde reguläre Ausdrücke</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Einstellungen</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>zu filternde Zeichenketten</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,32 @@
|
|||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>Habilitar filtros de chat personalizados</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>Habilitar filtros del Party Finder personalizados</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>Aplicar filtros a listados privados del Party Finder</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>Expresiones regulares a filtrar</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Ajustes de {0}</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>Subcadenas a filtrar</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,32 @@
|
|||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>Activer les filtres de discussion personnalisés</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>Activer les filtres de Recherche d'Équipe (PFs) personnalisés</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>Appliquer les filtres aux Recherches d'Équipe (PFs) listées en privées</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>Expressions régulières à filtrer</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>Paramètres de {0}</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>Sous-chaînes (substrings) à filtrer</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,32 @@
|
|||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>カスタムチャットフィルタを有効化</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>カスタムパーティ募集フィルタを有効化</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>プライベート募集にフィルタを適用</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>フィルタする正規表現</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>{0} 設定</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>フィルタするキーワード</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,39 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<root>
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>Enable custom chat filters</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>Apply filters to private Party Finder listings</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>Enable custom Party Finder filters</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>Substrings to filter</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>Regular expressions to filter</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>{0} settings</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,32 @@
|
|||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>启用自定义聊天消息过滤</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>启用自定义队员招募过滤</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>应用过滤规则至带密码的招募</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>过滤正则表达式</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>{0} 设置</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>过滤关键词</value>
|
||||
</data>
|
||||
</root>
|
|
@ -0,0 +1,32 @@
|
|||
<root>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="EnableCustomChatFilters" xml:space="preserve">
|
||||
<value>啟用客製化聊天消息過濾</value>
|
||||
</data>
|
||||
<data name="EnableCustomPartyFinderFilters" xml:space="preserve">
|
||||
<value>啟用客製化隊員招募過濾</value>
|
||||
</data>
|
||||
<data name="FilterPrivatePfs" xml:space="preserve">
|
||||
<value>應用過濾規則至帶密碼的招募</value>
|
||||
</data>
|
||||
<data name="RegularExpressionsToFilter" xml:space="preserve">
|
||||
<value>過濾正則表達式</value>
|
||||
</data>
|
||||
<data name="Settings" xml:space="preserve">
|
||||
<value>{0} 設置</value>
|
||||
</data>
|
||||
<data name="SubstringsToFilter" xml:space="preserve">
|
||||
<value>過濾關鍵詞</value>
|
||||
</data>
|
||||
</root>
|
|
@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoSoliciting.MessageClassif
|
|||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoSoliciting.Internal.Interface", "NoSoliciting.Internal.Interface\NoSoliciting.Internal.Interface.csproj", "{742F1B3F-030F-4886-B05D-0D41D4DDA8FD}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NoSoliciting.Lite", "NoSoliciting.Lite\NoSoliciting.Lite.csproj", "{46679548-E204-453B-AAAC-F31342071E03}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
|
@ -41,6 +43,10 @@ Global
|
|||
{742F1B3F-030F-4886-B05D-0D41D4DDA8FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{742F1B3F-030F-4886-B05D-0D41D4DDA8FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{742F1B3F-030F-4886-B05D-0D41D4DDA8FD}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{46679548-E204-453B-AAAC-F31342071E03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{46679548-E204-453B-AAAC-F31342071E03}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{46679548-E204-453B-AAAC-F31342071E03}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{46679548-E204-453B-AAAC-F31342071E03}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
Loading…
Reference in New Issue