diff --git a/src/CommandHandlers/SendMessageBoardHandler.cs b/src/CommandHandlers/SendMessageBoardHandler.cs new file mode 100644 index 0000000..fd383b5 --- /dev/null +++ b/src/CommandHandlers/SendMessageBoardHandler.cs @@ -0,0 +1,37 @@ +using System; +using sodoffmmo.Attributes; +using sodoffmmo.Core; +using sodoffmmo.Data; + +namespace sodoffmmo.CommandHandlers; + +[ExtensionCommandHandler("SMB")] +class SendMessageBoardHandler : CommandHandler +{ + public override Task Handle(Client client, NetworkObject receivedObject) + { + NetworkObject args = receivedObject.Get("p"); + + string toUserId = args.Get("tgt"); + string content = args.Get("cnt"); + string level = args.Get("lvl"); + + if (toUserId == string.Empty) toUserId = client.PlayerData.Uid; // send to self + + ApiWebService apiWebService = new(); + + // first check for any kind of ban + var banType = apiWebService.CheckForUserBan(client); + + if (banType != null && banType >= UserBanType.TemporaryOpenChatBan) { client.Send(Utils.ArrNetworkPacket(new string[] { "SMF" }, "SMF")); return Task.CompletedTask; } + + // send message + var result = apiWebService.SendMessageBoard(client, toUserId, content, level, "0"); + + if (result) + client.Send(Utils.ArrNetworkPacket(new string[] { "SMA", "-1", "SUCCESS", "1", DateTime.UtcNow.ToString() }, "SMA")); + else client.Send(Utils.ArrNetworkPacket(new string[] { "SMF" }, "SMF")); + + return Task.CompletedTask; + } +} diff --git a/src/CommandHandlers/SendMessageReplyHandler.cs b/src/CommandHandlers/SendMessageReplyHandler.cs new file mode 100644 index 0000000..781a804 --- /dev/null +++ b/src/CommandHandlers/SendMessageReplyHandler.cs @@ -0,0 +1,38 @@ +using System; +using sodoffmmo.Attributes; +using sodoffmmo.Core; +using sodoffmmo.Data; + +namespace sodoffmmo.CommandHandlers; + +[ExtensionCommandHandler("SMR")] +class SendMessageReplyHandler : CommandHandler +{ + public override Task Handle(Client client, NetworkObject receivedObject) + { + NetworkObject args = receivedObject.Get("p"); + + string toUserId = args.Get("tgt"); + string content = args.Get("cnt"); + string level = args.Get("lvl"); + string msgId = args.Get("rtm"); + + if (toUserId == string.Empty) toUserId = client.PlayerData.Uid; // send to self + + ApiWebService apiWebService = new(); + + // first check for any kind of ban + var banType = apiWebService.CheckForUserBan(client); + + if (banType != null && banType >= UserBanType.TemporaryOpenChatBan) { client.Send(Utils.ArrNetworkPacket(new string[] { "SMF" }, "SMF")); return Task.CompletedTask; } + + // send message + var result = apiWebService.SendMessageBoard(client, toUserId, content, level, msgId); + + if (result) + client.Send(Utils.ArrNetworkPacket(new string[] { "SMA", "-1", "SUCCESS", "1", DateTime.UtcNow.ToString() }, "SMA")); + else client.Send(Utils.ArrNetworkPacket(new string[] { "SMF" }, "SMF")); + + return Task.CompletedTask; + } +} diff --git a/src/Core/ApiWebService.cs b/src/Core/ApiWebService.cs index 602ce9b..d0d0844 100644 --- a/src/Core/ApiWebService.cs +++ b/src/Core/ApiWebService.cs @@ -48,6 +48,32 @@ public class ApiWebService } catch (Exception e) { LogError(e.Message); return null; } } + public bool SendMessageBoard(Client client, string userId, string data, string level, string replyMessageId) + { + HttpClient httpClient = new(); + var content = new FormUrlEncodedContent + ( + new Dictionary + { + { "token", client.PlayerData.UNToken }, + { "userId", userId }, + { "data", data }, + { "messageLevel", level }, + { "replyMessageId", replyMessageId } + } + ); + httpClient.Timeout = new TimeSpan(0, 0, 3); + + try + { + var response = httpClient.PostAsync($"{Configuration.ServerConfiguration.ApiUrl}/Messaging/PostTextMessage", content).Result; + Log("Messaging/PostTextMessage"); + + if (response.StatusCode == System.Net.HttpStatusCode.OK && response.Content != null) return response.Content.ReadFromJsonAsync().Result; + else return false; + } catch (Exception e) { LogError(e.Message); return false; } + } + private void Log(string endpoint) => Console.WriteLine($"Sent API Request To {Configuration.ServerConfiguration.ApiUrl}/{endpoint}"); private void LogError(string message) => Console.WriteLine($"An Error Has Occured When Sending An API Request - {message}");