Messaging Extension Endpoints #2

Merged
Moonbase merged 1 commits from messaging into main 2025-03-07 18:16:03 -08:00
3 changed files with 101 additions and 0 deletions

View File

@ -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<NetworkObject>("p");
string toUserId = args.Get<string>("tgt");
string content = args.Get<string>("cnt");
string level = args.Get<string>("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;
}
}

View File

@ -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<NetworkObject>("p");
string toUserId = args.Get<string>("tgt");
string content = args.Get<string>("cnt");
string level = args.Get<string>("lvl");
string msgId = args.Get<string>("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;
}
}

View File

@ -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<string, string>
{
{ "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<bool>().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}");