From 86ccd53ddb362ecf947cd947f5a6fbd8c348491f Mon Sep 17 00:00:00 2001
From: Stalitsa <kolokotronakos@gmail.com>
Date: Tue, 16 Feb 2021 23:22:16 +0000
Subject: [PATCH] Update chat listener for linked items.

---
 .../custom/service/discord/DiscordBot.java    |  2 +-
 .../discord/listeners/ChatListener.java       | 33 +++++++++++++++++--
 2 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java b/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java
index b2e45ab2c5..f2936e508e 100644
--- a/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java
+++ b/src/main/java/com/l2jserver/datapack/custom/service/discord/DiscordBot.java
@@ -18,7 +18,7 @@
  */
 package com.l2jserver.datapack.custom.service.discord;
 
-import com.l2jserver.datapack.custom.service.discord.commands.*;
+import com.l2jserver.datapack.custom.service.discord.commands.OnlineCommand;
 import com.l2jserver.datapack.custom.service.discord.commands.moderation.AbortCommand;
 import com.l2jserver.datapack.custom.service.discord.commands.moderation.AnnounceCommand;
 import com.l2jserver.datapack.custom.service.discord.commands.moderation.RestartCommand;
diff --git a/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java b/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java
index 9924e61978..c051b375fe 100644
--- a/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java
+++ b/src/main/java/com/l2jserver/datapack/custom/service/discord/listeners/ChatListener.java
@@ -19,14 +19,20 @@
 package com.l2jserver.datapack.custom.service.discord.listeners;
 
 import com.l2jserver.datapack.custom.service.discord.DiscordBot;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.events.Containers;
 import com.l2jserver.gameserver.model.events.EventType;
 import com.l2jserver.gameserver.model.events.impl.character.player.OnPlayerChat;
 import com.l2jserver.gameserver.model.events.listeners.ConsumerEventListener;
+import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
+import com.l2jserver.gameserver.model.items.type.CrystalType;
 import net.dv8tion.jda.api.EmbedBuilder;
 import net.dv8tion.jda.api.hooks.ListenerAdapter;
 
 import java.awt.Color;
+import java.text.DecimalFormat;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import static com.l2jserver.gameserver.config.Configuration.discord;
 
@@ -36,7 +42,9 @@ import static com.l2jserver.gameserver.config.Configuration.discord;
  * @version 2.6.2.0
  */
 public class ChatListener extends ListenerAdapter {
-    
+
+    private static final Pattern ITEM_LINK = Pattern.compile("[\b]\tType=[0-9]+[\\s]+\tID=([0-9]+)[\\s]+\tColor=[0-9]+[\\s]+\tUnderline=[0-9]+[\\s]+\tTitle=\u001B(.[^\u001B]*)[^\b]");
+
     public ChatListener() {
         Containers.Global().addListener(new ConsumerEventListener(Containers.Global(), EventType.ON_PLAYER_CHAT, (OnPlayerChat event) -> {
             EmbedBuilder eb = new EmbedBuilder();
@@ -47,11 +55,30 @@ public class ChatListener extends ListenerAdapter {
                 default -> null;
             };
             if (type != null) {
+                String replacedText = onShiftItems(event.getActiveChar(),  event.getText());
                 eb.setColor(Color.CYAN);
-                eb.setTitle("***___" + event.getActiveChar().getName() + "___***");
-                eb.setDescription("**" + type + ":** \n ``" + event.getText() + "``");
+                eb.setTitle("***___" + type + "___***");
+                eb.setDescription("**" + event.getActiveChar().getName() + ":** ``" + replacedText + "``");
                 DiscordBot.sendMessageTo(eb, discord().getGameChatChannelId());
             }
         }, this));
     }
+
+    private static String onShiftItems(L2PcInstance activeChar, String message) {
+        Matcher matcher = ITEM_LINK.matcher(message);
+        while (matcher.find()) {
+            int objectId = Integer.parseInt(matcher.group(1));
+            final L2ItemInstance item = activeChar.getInventory().getItemByObjectId(objectId);
+            DecimalFormat df = new DecimalFormat("#,###");
+            long count = item.getCount();
+            String enchant = item.getEnchantLevel() > 0 ? " +" + item.getEnchantLevel() : "";
+            String name = item.getItem().getItemGrade() != CrystalType.NONE ? item.getItem().getItemGrade().name() + "-" + item.getName() : "" + item.getName();
+            final String info = name  + enchant + "\n" + (item.isStackable() ? df.format(count) : "");
+            message = message.replace(matcher.group(0) + "\b", info);
+        }
+        if (message.contains("\b")) {
+            return message.substring(0, message.indexOf(8));
+        }
+        return message;
+    }
 }
-- 
GitLab