Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of TebConnectInfo v0.1.2
TebConnectInfo.dll
Decompiled 2 years agousing System.Diagnostics; using System.IO; using System.Net; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Threading.Tasks; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("TebConnectInfo")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("TebConnectInfo")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("19a0596c-30d8-441b-89fb-2de5f011f2bb")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace Tebbeh.TebConnectInfo; [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.tebbeh.mod.TebConnectInfo", "TebConnectInfo", "0.1.0")] public class TebConnectInfo : BaseUnityPlugin { public class GetConnectInfo { [HarmonyPatch(typeof(Chat), "OnNewChatMessage")] private class OnConnect { private static void Prefix(ref UserInfo user, ref Type type, ref string text) { if ((int)type == 2) { string name = user.Name; if (!string.IsNullOrEmpty(name)) { string text2 = GetjoinMessage(); text2 = text2.Replace("{player}", name); PostToDiscord(text2); } } } } [HarmonyPatch(typeof(ZNet), "RPC_Disconnect")] private class RPC_Disconnect { private static void Prefix(ZRpc rpc) { ZNetPeer peer = ZNet.instance.GetPeer(rpc); if (peer != null) { string playerName = peer.m_playerName; if (playerName.Length > 0) { string text = GetleaveMessage(); text = text.Replace("{player}", playerName); PostToDiscord(text); } } } } } private const string ModName = "TebConnectInfo"; private const string ModVersion = "0.1.0"; private const string Author = "com.tebbeh.mod"; private const string ModGUID = "com.tebbeh.mod.TebConnectInfo"; private static string ConfigFileName = "com.tebbeh.mod.TebConnectInfo.cfg"; private static string ConfigFileFullPath; private readonly Harmony HarmonyInstance = new Harmony("com.tebbeh.mod.TebConnectInfo"); public static readonly ManualLogSource TebLogger; internal static ConfigEntry<string> WebhookURL; internal static ConfigEntry<string> WebhookName; internal static ConfigEntry<string> joinMessage; internal static ConfigEntry<string> leaveMessage; private readonly ConfigurationManagerAttributes AdminConfig = new ConfigurationManagerAttributes { IsAdminOnly = true }; private readonly ConfigurationManagerAttributes ClientConfig = new ConfigurationManagerAttributes { IsAdminOnly = false }; public static string GetWebhookURL() { return WebhookURL.Value; } public static string GetWebhookName() { return WebhookName.Value; } public static string GetjoinMessage() { return joinMessage.Value; } public static string GetleaveMessage() { return leaveMessage.Value; } private void AddConfig<T>(string key, string section, string description, bool synced, T value, ref ConfigEntry<T> configEntry) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown string extendedDescription = GetExtendedDescription(description, synced); configEntry = ((BaseUnityPlugin)this).Config.Bind<T>(section, key, value, new ConfigDescription(extendedDescription, (AcceptableValueBase)null, new object[1] { synced ? AdminConfig : ClientConfig })); } public string GetExtendedDescription(string description, bool synchronizedSetting) { return description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"); } private void Awake() { AddConfig("WebhookURL", "General", "Webhook url (string).", synced: true, "", ref WebhookURL); AddConfig("WebhookName", "General", "Webhook send as username (string).", synced: true, "TebConnectInfo", ref WebhookName); AddConfig("JoinMessage", "Messages", "Join message to post with webhook, manipulate after your needs. Standard is for Discord! (string).", synced: true, ":green_circle: **{player}** has come online!", ref joinMessage); AddConfig("LeaveMessage", "Messages", "Leave message to post with webhook, manipulate after your needs. Standard is for Discord! (string).", synced: true, ":red_circle: **{player}** has gone offline!", ref leaveMessage); Assembly executingAssembly = Assembly.GetExecutingAssembly(); HarmonyInstance.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { TebLogger.LogDebug((object)"Attempting to reload configuration..."); ((BaseUnityPlugin)this).Config.Reload(); } catch { TebLogger.LogError((object)("There was an issue loading " + ConfigFileName)); } } private static void PostToDiscord(string content) { string value = WebhookURL.Value; string webhookUsername = WebhookName.Value; if (content == "" || value == "") { return; } WebRequest discordAPI = WebRequest.Create(value); discordAPI.Method = "POST"; discordAPI.ContentType = "application/json"; discordAPI.GetRequestStreamAsync().ContinueWith(delegate(Task<Stream> t) { using StreamWriter streamWriter = new StreamWriter(t.Result); string value2 = "{\"content\":\"" + escape(content) + "\"" + ((webhookUsername == "") ? "" : (", \"username\":\"" + escape(webhookUsername) + "\"")) + "}"; streamWriter.WriteAsync(value2).ContinueWith((Task _) => discordAPI.GetResponseAsync()); }); static string escape(string s) { return s.Replace("\\", "\\\\").Replace("\"", "\\\""); } } static TebConnectInfo() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; TebLogger = Logger.CreateLogSource("TebConnectInfo"); WebhookURL = null; WebhookName = null; joinMessage = null; leaveMessage = null; } }