From 9fc6968e31f568d6f2e69d0208c5570b8aff4a17 Mon Sep 17 00:00:00 2001
From: Controllerdestiny <523321293@qq.com>
Date: Mon, 20 Jan 2025 23:18:28 +0800
Subject: [PATCH] fix: ChattyBridge ForwardMsg Error

---
 src/ChattyBridge/Config.cs |  4 +++
 src/ChattyBridge/Plugin.cs | 50 ++++++++++++++++++--------------------
 2 files changed, 27 insertions(+), 27 deletions(-)

diff --git a/src/ChattyBridge/Config.cs b/src/ChattyBridge/Config.cs
index 690e1a7bd..f3290cf0f 100644
--- a/src/ChattyBridge/Config.cs
+++ b/src/ChattyBridge/Config.cs
@@ -6,6 +6,10 @@ namespace ChattyBridge;
 [Config]
 public class Config : JsonConfigBase<Config>
 {
+    [LocalizedPropertyName(CultureType.English, "debug")]
+    [LocalizedPropertyName(CultureType.Chinese, "debug")]
+    public bool Debug { get; set; } = false;
+
     [LocalizedPropertyName(CultureType.English, "forward_command")]
     [LocalizedPropertyName(CultureType.Chinese, "转发指令")]
     public bool ForwardCommand { get; set; } = false;
diff --git a/src/ChattyBridge/Plugin.cs b/src/ChattyBridge/Plugin.cs
index 3a3590b0b..ace33472c 100644
--- a/src/ChattyBridge/Plugin.cs
+++ b/src/ChattyBridge/Plugin.cs
@@ -2,9 +2,7 @@
 using LazyAPI;
 using Newtonsoft.Json.Linq;
 using Rests;
-using System.Net;
 using System.Reflection;
-using System.Text;
 using System.Web;
 using Terraria;
 using TerrariaApi.Server;
@@ -18,7 +16,7 @@ public class Plugin : LazyPlugin
     public override string Author => "少司命";
     public override string Description => Assembly.GetExecutingAssembly().GetName().Name!;
     public override string Name => Assembly.GetExecutingAssembly().GetName().Name!;
-    public override Version Version => new Version(1, 0, 1, 2);
+    public override Version Version => new Version(1, 0, 1, 3);
 
     private readonly HttpClient _client  = new ();
 
@@ -53,15 +51,14 @@ protected override void Dispose(bool disposing)
     private static object HandleMsg(RestRequestArgs args)
     {
         var msg = args.Parameters["msg"];
-        var isVer = args.Parameters["verify"] == Config.Instance.Verify;
-        if (!isVer)
+        TShock.Log.ConsoleDebug($"ChattyBridge Receive: {msg}");
+        if (args.Parameters["verify"] != Config.Instance.Verify)
         {
-            return new RestObject("403");
+            return new RestObject("403") { Response = "ChattyBridge Token Verify Error!" };
         }
         try
         {
-            var sourceMsg = Encoding.UTF8.GetString(Convert.FromBase64String(msg));
-            var json = JObject.Parse(sourceMsg);
+            var json = JObject.Parse(msg);
             if (json.TryGetValue("type", out var type))
             {
                 switch (type.ToString())
@@ -93,25 +90,23 @@ private static object HandleMsg(RestRequestArgs args)
         }
         catch (Exception ex)
         {
-            TShock.Log.ConsoleError(ex.ToString());
-            return new RestObject("500");
+            return new RestObject("500") { Response = $"An error occurred in the processing of the message: {ex.Message}" };
         }
-        return new RestObject("200");
+        return new RestObject("200") { Response = "Message Send Successfully!" };
     }
 
     private void SendMsg(string msg)
     {
-        Task.Run(() =>
+        Task.Run(async () =>
         {
-            var baseStr = Convert.ToBase64String(Encoding.UTF8.GetBytes(msg));
             foreach (var host in Config.Instance.RestHost)
             {
                 try
                 {
                     var url = $"http://{host}/chat";
-                    this.HttpGet(url, new Dictionary<string, string>
+                    await this.HttpGet(url, new Dictionary<string, string>
                     {
-                        { "msg", baseStr },
+                        { "msg", msg },
                         { "verify", Config.Instance.Verify }
                     });
                 }
@@ -123,7 +118,7 @@ private void SendMsg(string msg)
         });
     }
 
-    private void HttpGet(string url, Dictionary<string, string> payload)
+    private async Task HttpGet(string url, Dictionary<string, string> payload)
     {
         var urlBuilder = new UriBuilder(url);
         var param = HttpUtility.ParseQueryString(urlBuilder.Query);
@@ -132,18 +127,19 @@ private void HttpGet(string url, Dictionary<string, string> payload)
             param[key] = value;
         }
         urlBuilder.Query = param.ToString();
-        var response =  this._client.Send(new HttpRequestMessage(HttpMethod.Get, urlBuilder.ToString()));
-        switch (response.StatusCode)
+        var response = await this._client.GetAsync(urlBuilder.ToString());
+        try
+        {
+            TShock.Log.ConsoleDebug($"ChattyBridge Send: {payload["msg"]}");
+            response.EnsureSuccessStatusCode();
+        }
+        catch (HttpRequestException e)
+        {
+            TShock.Log.ConsoleError($"[ChattyBridge] Error: {e.Message}");
+        }
+        finally
         {
-            case HttpStatusCode.OK:
-                break;
-            case HttpStatusCode.Unauthorized:
-                 TShock.Log.ConsoleError(GetString($"[聊天桥] 访问目标服务器验证失败:{url},请检查你的令牌是否配置正确!"));
-                 break;
-            case HttpStatusCode.InternalServerError:
-                TShock.Log.ConsoleError(GetString($"[聊天桥] 目标服务器处理请求出错:{url}!"));
-                break;
-                    
+            TShock.Log.ConsoleDebug($"ChattyBridage Response: {await response.Content.ReadAsStringAsync()}");
         }
     }