This commit is contained in:
Chayapak 2023-07-21 16:37:01 +07:00
parent 889f9ed137
commit b172000ac1
7 changed files with 81 additions and 84 deletions

View file

@ -69,14 +69,19 @@ public class ChatPlugin extends Bot.Listener {
public void packetReceived (ClientboundSystemChatPacket packet) {
final Component component = packet.getContent();
try {
final String key = ((TranslatableComponent) component).key();
if (
component instanceof TextComponent t_component &&
t_component.content().length() > 15_000
) return;
if (component instanceof TranslatableComponent t_component) {
final String key = t_component.key();
if (
key.equals("advMode.setCommand.success") ||
key.equals("advMode.notAllowed")
) return;
} catch (ClassCastException ignored) {}
}
PlayerMessage playerMessage = null;
@ -86,20 +91,15 @@ public class ChatPlugin extends Bot.Listener {
}
boolean isCommandSuggestions = false;
try {
final String id = ((TextComponent) component).content();
if (component instanceof TextComponent t_component) {
final String id = t_component.content();
if (id.equals(bot.commandSuggestion.id)) isCommandSuggestions = true;
} catch (Exception ignored) {}
final String string = ComponentUtilities.stringify(component);
final String ansi = ComponentUtilities.stringifyAnsi(component);
}
for (Listener listener : listeners) {
if (string.length() < 25_000) {
if (!isCommandSuggestions) listener.systemMessageReceived(component, string, ansi);
listener.systemMessageReceived(component, isCommandSuggestions, string, ansi);
}
if (!isCommandSuggestions) listener.systemMessageReceived(component);
listener.systemMessageReceived(component, isCommandSuggestions);
if (playerMessage != null) listener.playerMessageReceived(playerMessage);
}
@ -140,13 +140,6 @@ public class ChatPlugin extends Bot.Listener {
final String translation = getTranslationByChatType(packet.getChatType());
String string = null;
String ansi = null;
if (translation != null && unsignedContent != null) {
string = ComponentUtilities.stringify(unsignedContent);
ansi = ComponentUtilities.stringifyAnsi(unsignedContent);
}
for (Listener listener : listeners) {
listener.playerMessageReceived(playerMessage);
@ -163,13 +156,9 @@ public class ChatPlugin extends Bot.Listener {
component = component.args(playerMessage.displayName, playerMessage.contents);
}
if (string.length() > 25_000) continue;
listener.systemMessageReceived(component, string, ansi);
listener.systemMessageReceived(component);
} else {
if (string.length() > 25_000) continue;
listener.systemMessageReceived(unsignedContent, string, ansi);
listener.systemMessageReceived(unsignedContent);
}
}
}
@ -203,10 +192,8 @@ public class ChatPlugin extends Bot.Listener {
translatableComponent = translatableComponent.args(name, content);
}
final String string = ComponentUtilities.stringify(component);
final String ansi = ComponentUtilities.stringifyAnsi(component);
for (Listener listener : listeners) {
listener.systemMessageReceived(translatableComponent, string, ansi);
listener.systemMessageReceived(translatableComponent);
}
for (ChatParser parser : chatParsers) {
@ -225,15 +212,10 @@ public class ChatPlugin extends Bot.Listener {
final PlayerMessage playerMessage = new PlayerMessage(parsedFromMessage.sender, packet.getName(), parsedFromMessage.contents);
final String string = ComponentUtilities.stringify(component);
final String ansi = ComponentUtilities.stringifyAnsi(component);
for (Listener listener : listeners) {
listener.playerMessageReceived(playerMessage);
if (string.length() > 25_000) continue;
listener.systemMessageReceived(component, string, ansi);
listener.systemMessageReceived(component);
}
}
} catch (Exception e) {
@ -349,7 +331,7 @@ public class ChatPlugin extends Bot.Listener {
public static class Listener {
public void playerMessageReceived (PlayerMessage message) {}
public void systemMessageReceived (Component component, String string, String ansi) {}
public void systemMessageReceived (Component component, boolean isCommandSuggestions, String string, String ansi) {}
public void systemMessageReceived (Component component) {}
public void systemMessageReceived (Component component, boolean isCommandSuggestions) {}
}
}

View file

@ -22,7 +22,7 @@ public class CommandSpyPlugin extends ChatPlugin.Listener {
}
@Override
public void systemMessageReceived(Component component, String string, String ansi) {
public void systemMessageReceived(Component component) {
TextComponent textComponent;
try {

View file

@ -20,7 +20,7 @@ public class CommandSuggestionPlugin extends ChatPlugin.Listener {
}
@Override
public void systemMessageReceived(Component component, boolean isCommandSuggestions, String string, String ansi) {
public void systemMessageReceived(Component component, boolean isCommandSuggestions) {
if (!isCommandSuggestions) return;
try {

View file

@ -59,7 +59,10 @@ public class DiscordPlugin {
bot.chat.addListener(new ChatPlugin.Listener() {
@Override
public void systemMessageReceived (Component component, String string, String ansi) {
public void systemMessageReceived (Component component) {
final String string = ComponentUtilities.stringify(component);
final String ansi = ComponentUtilities.stringifyAnsi(component);
if (string.length() > 2048) {
sendMessage(CodeBlockUtilities.escape(string), channelId);
} else {

View file

@ -78,8 +78,14 @@ public class LoggerPlugin extends ChatPlugin.Listener {
}
@Override
public void systemMessageReceived(Component component, String string, String ansi) {
log(ansi, false, logToConsole);
public void systemMessageReceived(Component component) {
final String string = ComponentUtilities.stringify(component);
if (logToConsole) {
final String ansi = ComponentUtilities.stringifyAnsi(component);
log(ansi, false, true);
}
log(string, true, false);
}
}

View file

@ -14,6 +14,7 @@ import com.github.steveice10.packetlib.event.session.DisconnectedEvent;
import com.github.steveice10.packetlib.packet.Packet;
import land.chipmunk.chayapak.chomens_bot.Bot;
import land.chipmunk.chayapak.chomens_bot.Configuration;
import land.chipmunk.chayapak.chomens_bot.util.ComponentUtilities;
import net.kyori.adventure.text.Component;
import org.cloudburstmc.math.vector.Vector3i;
@ -46,7 +47,9 @@ public class SelfCarePlugin extends Bot.Listener {
bot.chat.addListener(new ChatPlugin.Listener() {
@Override
public void systemMessageReceived(Component component, String string, String ansi) {
public void systemMessageReceived(Component component) {
final String string = ComponentUtilities.stringify(component);
if (string.equals("Successfully enabled CommandSpy")) cspy = true;
else if (string.equals("Successfully disabled CommandSpy")) cspy = false;

View file

@ -3,10 +3,13 @@ package land.chipmunk.chayapak.chomens_bot.util;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonPrimitive;
import land.chipmunk.chayapak.chomens_bot.Main;
import java.io.*;
import java.util.ConcurrentModificationException;
import java.util.*;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
public class PersistentDataUtilities {
public static final File file = new File("persistent.json");
@ -15,8 +18,35 @@ public class PersistentDataUtilities {
public static JsonObject jsonObject = new JsonObject();
private static final Map<String, JsonElement> queue = new LinkedHashMap<>();
private static final ScheduledFuture<?> future;
static {
init();
future = Main.executor.scheduleAtFixedRate(() -> {
if (queue.size() == 0) return;
final Map.Entry<String, JsonElement> entry = queue.entrySet().iterator().next(); // is this the best way to get the first item of the map?
final String property = entry.getKey();
final JsonElement value = entry.getValue();
if (jsonObject.has(property)) jsonObject.remove(property);
jsonObject.add(property, value);
write(jsonObject.toString());
queue.remove(property);
}, 0, 100, TimeUnit.MILLISECONDS);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
future.cancel(false);
}
});
}
private static void init () {
@ -39,63 +69,36 @@ public class PersistentDataUtilities {
}
}
private static synchronized void write () {
private static synchronized void write (String string) {
try {
final String stringifiedJsonObject = jsonObject.toString();
writer.close();
// ? how do i clear the file contents without making a completely new FileWriter
// or is this the only way?
writer = new FileWriter(file, false);
writer.write(stringifiedJsonObject);
writer.write(string);
writer.flush();
} catch (IOException | ConcurrentModificationException ignored) {}
} catch (IOException ignored) {}
}
public static synchronized void put (String property, JsonElement value) {
Main.executorService.submit(() -> {
if (jsonObject.has(property)) jsonObject.remove(property);
jsonObject.add(property, value);
write();
});
public static void put (String property, JsonElement value) {
queue.put(property, value);
}
public static synchronized void put (String property, String value) {
Main.executorService.submit(() -> {
if (jsonObject.has(property)) jsonObject.remove(property);
jsonObject.addProperty(property, value);
write();
});
public static void put (String property, String value) {
queue.put(property, new JsonPrimitive(value));
}
public static synchronized void put (String property, boolean value) {
Main.executorService.submit(() -> {
if (jsonObject.has(property)) jsonObject.remove(property);
jsonObject.addProperty(property, value);
write();
});
public static void put (String property, boolean value) {
queue.put(property, new JsonPrimitive(value));
}
public static synchronized void put (String property, int value) {
Main.executorService.submit(() -> {
if (jsonObject.has(property)) jsonObject.remove(property);
jsonObject.addProperty(property, value);
write();
});
public static void put (String property, int value) {
queue.put(property, new JsonPrimitive(value));
}
public static synchronized void put (String property, char value) {
Main.executorService.submit(() -> {
if (jsonObject.has(property)) jsonObject.remove(property);
jsonObject.addProperty(property, value);
write();
});
public static void put (String property, char value) {
queue.put(property, new JsonPrimitive(value));
}
}