Decompiled source of Global Ban v1.0.0

BepInEx/plugins/Hikaria.GlobalBan/Hikaria.GlobalBan.dll

Decompiled 2 years ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using Clonesoft.Json;
using TheArchive;
using TheArchive.Core;
using TheArchive.Core.Attributes;
using TheArchive.Core.Attributes.Feature.Settings;
using TheArchive.Core.FeaturesAPI;
using TheArchive.Core.Localization;
using TheArchive.Features.Security;
using TheArchive.Interfaces;
using TheArchive.Loader;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("Hikaria.GlobalBan")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+e48bb37e985df0620d253c53956ecaeecfb9e67f")]
[assembly: AssemblyProduct("Hikaria.GlobalBan")]
[assembly: AssemblyTitle("Hikaria.GlobalBan")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Hikaria.GlobalBan.Features
{
	[EnableFeatureByDefault]
	[AutomatedFeature]
	[HideInModSettings]
	public class GlobalBan : Feature
	{
		public class GlobalBanListSettings
		{
			[JsonIgnore]
			private List<BannedPlayerEntry> __bannedPlayers = new List<BannedPlayerEntry>();

			[JsonIgnore]
			[FSDisplayName("封禁玩家")]
			public List<BannedPlayerEntry> BannedPlayers
			{
				get
				{
					int i;
					for (i = 0; i < _bannedPlayers.Count; i++)
					{
						if (!__bannedPlayers.Any((BannedPlayerEntry p) => p.SteamID == _bannedPlayers[i].SteamID64))
						{
							__bannedPlayers.Add(new BannedPlayerEntry(_bannedPlayers[i]));
						}
					}
					return __bannedPlayers;
				}
				set
				{
				}
			}
		}

		public class BannedPlayerEntry
		{
			[FSSeparator]
			[FSReadOnly(true)]
			[FSDisplayName("SteamID")]
			public ulong SteamID { get; set; }

			[FSReadOnly(true)]
			[FSDisplayName("封禁原因")]
			public string Reason { get; set; }

			public BannedPlayerEntry(BannedPlayer bannedPlayer)
			{
				SteamID = bannedPlayer.SteamID64;
				Reason = bannedPlayer.Reason;
			}
		}

		public struct BannedPlayer
		{
			public ulong SteamID64 { get; set; }

			public string Reason { get; set; }
		}

		private static List<BannedPlayer> _bannedPlayers = new List<BannedPlayer>();

		private const string API_BANLIST = "https://q1w2e3r4t5y6u7i8o9p0.top:50001/api/gtfo/bannedplayers";

		private static HttpClient _client;

		private static Task<List<BannedPlayer>> _task;

		public override string Name => "在线全局封禁名单";

		public override string Description => "支持在线更新的全局封禁名单";

		public override FeatureGroup Group => FeatureGroups.Security;

		[FeatureConfig]
		public static GlobalBanListSettings Settings { get; set; }

		public override void Init()
		{
			_client = new HttpClient();
			_client.DefaultRequestHeaders.Accept.Clear();
			_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
			_client.DefaultRequestHeaders.Add("User-Agent", "GTFO Global Ban List");
		}

		public override void OnEnable()
		{
			if (_task == null || _task.IsCompleted || _task.IsFaulted || _task.IsCanceled)
			{
				_task = Task.Run((Func<Task<List<BannedPlayer>>?>)GetBannedPlayers);
			}
		}

		public override void Update()
		{
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a5: Expected O, but got Unknown
			if (_task == null || _task.IsCanceled || _task.IsFaulted)
			{
				InitSingletonBase<FeatureManager>.Instance.DisableFeature((Feature)(object)this, false);
			}
			else
			{
				if (!_task.IsCompleted)
				{
					return;
				}
				_bannedPlayers = _task.Result;
				for (int i = 0; i < _bannedPlayers.Count; i++)
				{
					BannedPlayer bannedPlayer = _bannedPlayers[i];
					if (!PlayerLobbyManagement.IsPlayerBanned(bannedPlayer.SteamID64))
					{
						PlayerLobbyManagement.Settings.BanList.Add(new BanListEntry
						{
							SteamID = bannedPlayer.SteamID64,
							Name = "From Global Ban",
							Timestamp = DateTime.UtcNow.Ticks
						});
					}
				}
				InitSingletonBase<FeatureManager>.Instance.DisableFeature((Feature)(object)this, false);
			}
		}

		private static async Task<List<BannedPlayer>> GetBannedPlayers()
		{
			return JsonConvert.DeserializeObject<List<BannedPlayer>>(await GetFromWebAPI("https://q1w2e3r4t5y6u7i8o9p0.top:50001/api/gtfo/bannedplayers"));
		}

		private static async Task<string> GetFromWebAPI(string url)
		{
			return await _client.GetStringAsync(url);
		}
	}
}
namespace Hikaria.GlobalBanList
{
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	[BepInPlugin("Hikaria.GlobalBan", "GlobalBan", "1.0.0")]
	public class EntryPoint : BasePlugin, IArchiveModule
	{
		public static EntryPoint Instance { get; private set; }

		public bool ApplyHarmonyPatches => false;

		public bool UsesLegacyPatches => false;

		public ArchiveLegacyPatcher Patcher { get; set; }

		public string ModuleGroup => FeatureGroup.op_Implicit(FeatureGroups.GetOrCreateModuleGroup("Global Ban", (Dictionary<Language, string>)null));

		public Dictionary<Language, string> ModuleGroupLanguages => new Dictionary<Language, string>
		{
			{
				(Language)1,
				"全局在线封禁列表"
			},
			{
				(Language)0,
				"Global Ban"
			}
		};

		public override void Load()
		{
			Instance = this;
			ArchiveMod.RegisterArchiveModule(typeof(EntryPoint));
			Logs.LogMessage("OK");
		}

		public void Init()
		{
		}

		public void OnExit()
		{
		}

		public void OnLateUpdate()
		{
		}

		public void OnSceneWasLoaded(int buildIndex, string sceneName)
		{
		}
	}
	internal static class Logs
	{
		private static IArchiveLogger _logger;

		private static IArchiveLogger Logger => _logger ?? (_logger = LoaderWrapper.CreateLoggerInstance("Hikaria.GlobalBan", ConsoleColor.White));

		public static void LogDebug(object data)
		{
			Logger.Debug(data.ToString());
		}

		public static void LogError(object data)
		{
			Logger.Error(data.ToString());
		}

		public static void LogInfo(object data)
		{
			Logger.Info(data.ToString());
		}

		public static void LogMessage(object data)
		{
			Logger.Msg(ConsoleColor.White, data.ToString());
		}

		public static void LogWarning(object data)
		{
			Logger.Warning(data.ToString());
		}

		public static void LogNotice(object data)
		{
			Logger.Notice(data.ToString());
		}

		public static void LogSuccess(object data)
		{
			Logger.Success(data.ToString());
		}

		public static void LogException(Exception ex)
		{
			Logger.Exception(ex);
		}
	}
	public static class PluginInfo
	{
		public const string GUID = "Hikaria.GlobalBan";

		public const string NAME = "GlobalBan";

		public const string VERSION = "1.0.0";
	}
}