Update ChatMessageHandler.cs

This commit is contained in:
YoshiCraft64 2025-09-07 19:07:26 -05:00 committed by GitHub
parent 15aacc282e
commit 2d86d32275
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -1,87 +1,88 @@
using sodoffmmo.Attributes; using sodoffmmo.Attributes;
using sodoffmmo.Core; using sodoffmmo.Core;
using sodoffmmo.Data; using sodoffmmo.Data;
using sodoffmmo.Management; using sodoffmmo.Management;
namespace sodoffmmo.CommandHandlers; namespace sodoffmmo.CommandHandlers;
[ExtensionCommandHandler("SCM")] [ExtensionCommandHandler("SCM")]
class ChatMessageHandler : CommandHandler { class ChatMessageHandler : CommandHandler {
public override Task Handle(Client client, NetworkObject receivedObject) { public override Task Handle(Client client, NetworkObject receivedObject) {
string message = receivedObject.Get<NetworkObject>("p").Get<string>("chm"); string message = receivedObject.Get<NetworkObject>("p").Get<string>("chm");
string messageFilter = message.ToLower(); string messageFilter = message.ToLower();
if (ManagementCommandProcessor.ProcessCommand(message, client)) if (ManagementCommandProcessor.ProcessCommand(message, client))
return Task.CompletedTask; return Task.CompletedTask;
if (client.TempMuted) if (client.TempMuted)
{ {
ClientMuted(client); ClientMuted(client);
return Task.CompletedTask; return Task.CompletedTask;
} }
messageFilter = messageFilter.Replace(",", "");//Hardcoded to remove commas from the message due to some issues messageFilter = messageFilter.Replace(",", "");//Hardcoded to remove commas from the message due to some issues
foreach (var replaceable in ChatFilter.ChatFilterConfiguration.charsToRemove)//Rolls through the entire character replacement list foreach (var replaceable in ChatFilter.ChatFilterConfiguration.charsToRemove)//Rolls through the entire character replacement list
{ {
if (replaceable.Contains(","))//Checks if the replace string is valid (has a comma) if (replaceable.Contains(","))//Checks if the replace string is valid (has a comma)
{ {
string char1 = replaceable.Remove(replaceable.LastIndexOf(','));//Gets the character to be replaced string char1 = replaceable.Remove(replaceable.LastIndexOf(','));//Gets the character to be replaced
string char2 = replaceable.Remove(0, replaceable.LastIndexOf(',') + 1);//Gets the replacement string char2 = replaceable.Remove(0, replaceable.LastIndexOf(',') + 1);//Gets the replacement
messageFilter = messageFilter.Replace(char1, char2); messageFilter = messageFilter.Replace(char1, char2);
} }
} }
messageFilter = messageFilter.Replace(" ", ""); messageFilter = messageFilter.Replace(" ", "");
foreach (var banned in ChatFilter.ChatFilterConfiguration.FilteredWords)//Rolls through the entire denylist foreach (var banned in ChatFilter.ChatFilterConfiguration.FilteredWords)//Rolls through the entire denylist
{ {
if (messageFilter.Contains(banned))//Checks if your message contains a word from the denylist if (messageFilter.Contains(banned))//Checks if your message contains a word from the denylist
{ {
Console.WriteLine("Banned message from " + client.PlayerData.Uid + " (" + client.PlayerData.DiplayName + "): \"" + messageFilter + "\", \"" + message + "\" in game: " + client.PlayerData.ZoneName); Console.WriteLine("Banned message from " + client.PlayerData.Uid + " (" + client.PlayerData.DiplayName + "): \"" + messageFilter + "\", \"" + message + "\" in game: " + client.PlayerData.ZoneName);
ClientFilter(client); ClientFilter(client);
if (!ChatFilter.ChatFilterConfiguration.blockedMessage.Equals("")) if (!ChatFilter.ChatFilterConfiguration.blockedMessage.Equals(""))
Chat(client, ChatFilter.ChatFilterConfiguration.blockedMessage);//This replaces the user's message with the message in the string. TODO: Add the string to the chatfilter json for the purpose of customization (How do I do that) Chat(client, ChatFilter.ChatFilterConfiguration.blockedMessage);//This replaces the user's message with the message in the string.
return Task.CompletedTask; return Task.CompletedTask;
} }
} }
if (!Configuration.ServerConfiguration.EnableChat && !client.Room.AllowChatOverride) if (!Configuration.ServerConfiguration.EnableChat && !client.Room.AllowChatOverride)
{ {
ChatDisabled(client); ChatDisabled(client);
} }
else else
{
Console.WriteLine("Message from " + client.PlayerData.Uid + " (" + client.PlayerData.DiplayName + "): \"" + messageFilter + "\", \"" + message + "\" in game: " + client.PlayerData.ZoneName); {
Chat(client, message); Console.WriteLine("Message from " + client.PlayerData.Uid + " (" + client.PlayerData.DiplayName + "): \"" + messageFilter + "\", \"" + message + "\" in game: " + client.PlayerData.ZoneName);
} Chat(client, message);
return Task.CompletedTask; }
} return Task.CompletedTask;
}
public void ClientFilter(Client client)
{ public void ClientFilter(Client client)
client.Send(Utils.BuildServerSideMessage("This message contains a word or phrase not allowed on this server.", "Server")); {
} client.Send(Utils.BuildServerSideMessage("This message contains a word or phrase not allowed on this server.", "Server"));
}
public void ChatDisabled(Client client) {
client.Send(Utils.BuildServerSideMessage("Unfortunately, chat has been disabled by server administrators", "Server")); public void ChatDisabled(Client client) {
} client.Send(Utils.BuildServerSideMessage("Unfortunately, chat has been disabled by server administrators", "Server"));
}
public void ClientMuted(Client client) {
client.Send(Utils.BuildServerSideMessage("You have been muted by the moderators", "Server")); public void ClientMuted(Client client) {
} client.Send(Utils.BuildServerSideMessage("You have been muted by the moderators", "Server"));
}
public void Chat(Client client, string message) {
if (Configuration.ServerConfiguration.Authentication >= AuthenticationMode.RequiredForChat && client.PlayerData.DiplayName == "placeholder") { public void Chat(Client client, string message) {
client.Send(Utils.BuildServerSideMessage("You must be authenticated to use the chat", "Server")); if (Configuration.ServerConfiguration.Authentication >= AuthenticationMode.RequiredForChat && client.PlayerData.DiplayName == "placeholder") {
return; client.Send(Utils.BuildServerSideMessage("You must be authenticated to use the chat", "Server"));
} return;
}
client.Room.Send(Utils.BuildChatMessage(client.PlayerData.Uid, message, client.PlayerData.DiplayName), client);
client.Room.Send(Utils.BuildChatMessage(client.PlayerData.Uid, message, client.PlayerData.DiplayName), client);
NetworkObject cmd = new();
NetworkObject data = new(); NetworkObject cmd = new();
data.Add("arr", new string[] { "SCA", "-1", "1", message, "", "1" }); NetworkObject data = new();
cmd.Add("c", "SCA"); data.Add("arr", new string[] { "SCA", "-1", "1", message, "", "1" });
cmd.Add("p", data); cmd.Add("c", "SCA");
NetworkPacket packet = NetworkObject.WrapObject(1, 13, cmd).Serialize(); cmd.Add("p", data);
client.Send(packet); NetworkPacket packet = NetworkObject.WrapObject(1, 13, cmd).Serialize();
} client.Send(packet);
} }
}