From 00a4c627c545bd81f88008e3ea4e9a7ce5757e4f Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Tue, 5 Feb 2019 12:15:00 +0000 Subject: [PATCH] party: add party chat messages Signed-off-by: Tomas Slusny --- .../http/api/ws/WebsocketGsonFactory.java | 2 ++ .../ws/messages/party/PartyChatMessage.java | 33 +++++++++++++++++++ .../java/net/runelite/client/RuneLite.java | 4 +-- .../plugins/chatfilter/ChatFilterPlugin.java | 3 +- .../JagexPrintableCharMatcher.java | 2 +- .../java/net/runelite/client/util/Text.java | 2 ++ .../net/runelite/client/ws/PartyService.java | 31 ++++++++++++++++- 7 files changed, 72 insertions(+), 5 deletions(-) create mode 100644 http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java rename runelite-client/src/main/java/net/runelite/client/{plugins/chatfilter => util}/JagexPrintableCharMatcher.java (97%) diff --git a/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java b/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java index 589a538de3..9d4e46e6ea 100644 --- a/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java +++ b/http-api/src/main/java/net/runelite/http/api/ws/WebsocketGsonFactory.java @@ -34,6 +34,7 @@ import net.runelite.http.api.ws.messages.Handshake; import net.runelite.http.api.ws.messages.LoginResponse; import net.runelite.http.api.ws.messages.party.Join; import net.runelite.http.api.ws.messages.party.Part; +import net.runelite.http.api.ws.messages.party.PartyChatMessage; import net.runelite.http.api.ws.messages.party.UserJoin; import net.runelite.http.api.ws.messages.party.UserPart; import net.runelite.http.api.ws.messages.party.UserSync; @@ -52,6 +53,7 @@ public class WebsocketGsonFactory messages.add(UserJoin.class); messages.add(UserPart.class); messages.add(UserSync.class); + messages.add(PartyChatMessage.class); MESSAGES = messages; } diff --git a/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java new file mode 100644 index 0000000000..480e2660c1 --- /dev/null +++ b/http-api/src/main/java/net/runelite/http/api/ws/messages/party/PartyChatMessage.java @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2019, Tomas Slusny + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package net.runelite.http.api.ws.messages.party; + +import lombok.Value; + +@Value +public class PartyChatMessage extends PartyMemberMessage +{ + private final String value; +} diff --git a/runelite-client/src/main/java/net/runelite/client/RuneLite.java b/runelite-client/src/main/java/net/runelite/client/RuneLite.java index e04379fb1e..e309734264 100644 --- a/runelite-client/src/main/java/net/runelite/client/RuneLite.java +++ b/runelite-client/src/main/java/net/runelite/client/RuneLite.java @@ -112,7 +112,7 @@ public class RuneLite private OverlayManager overlayManager; @Inject - private PartyService partyService; + private Provider partyService; @Inject private Provider itemManager; @@ -276,13 +276,13 @@ public class RuneLite eventBus.register(overlayManager); eventBus.register(drawManager); eventBus.register(infoBoxManager); - eventBus.register(partyService); if (!isOutdated) { // Initialize chat colors chatMessageManager.get().loadColors(); + eventBus.register(partyService.get()); eventBus.register(overlayRenderer.get()); eventBus.register(clanManager.get()); eventBus.register(itemManager.get()); diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java index 6a3db9266f..cd104e3ccd 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java +++ b/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/ChatFilterPlugin.java @@ -25,6 +25,7 @@ */ package net.runelite.client.plugins.chatfilter; +import com.google.common.base.CharMatcher; import com.google.common.base.Splitter; import com.google.inject.Provides; import java.util.ArrayList; @@ -62,7 +63,7 @@ public class ChatFilterPlugin extends Plugin private static final String CENSOR_MESSAGE = "Hey, everyone, I just tried to say something very silly!"; - private final JagexPrintableCharMatcher jagexPrintableCharMatcher = new JagexPrintableCharMatcher(); + private final CharMatcher jagexPrintableCharMatcher = Text.JAGEX_PRINTABLE_CHAR_MATCHER; private final List filteredPatterns = new ArrayList<>(); @Inject diff --git a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/JagexPrintableCharMatcher.java b/runelite-client/src/main/java/net/runelite/client/util/JagexPrintableCharMatcher.java similarity index 97% rename from runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/JagexPrintableCharMatcher.java rename to runelite-client/src/main/java/net/runelite/client/util/JagexPrintableCharMatcher.java index 72591d71f0..41bc771e9d 100644 --- a/runelite-client/src/main/java/net/runelite/client/plugins/chatfilter/JagexPrintableCharMatcher.java +++ b/runelite-client/src/main/java/net/runelite/client/util/JagexPrintableCharMatcher.java @@ -22,7 +22,7 @@ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -package net.runelite.client.plugins.chatfilter; +package net.runelite.client.util; import com.google.common.base.CharMatcher; diff --git a/runelite-client/src/main/java/net/runelite/client/util/Text.java b/runelite-client/src/main/java/net/runelite/client/util/Text.java index 6158b9a32f..78c08f16aa 100644 --- a/runelite-client/src/main/java/net/runelite/client/util/Text.java +++ b/runelite-client/src/main/java/net/runelite/client/util/Text.java @@ -46,6 +46,8 @@ public class Text private static final Joiner COMMA_JOINER = Joiner.on(",").skipNulls(); + public static final CharMatcher JAGEX_PRINTABLE_CHAR_MATCHER = new JagexPrintableCharMatcher(); + /** * Splits comma separated values to list of strings * diff --git a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java index caec527320..6a6e3aa120 100644 --- a/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java +++ b/runelite-client/src/main/java/net/runelite/client/ws/PartyService.java @@ -33,13 +33,18 @@ import javax.inject.Singleton; import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; +import net.runelite.api.ChatMessageType; import net.runelite.client.account.AccountSession; import net.runelite.client.account.SessionManager; +import net.runelite.client.chat.ChatMessageManager; +import net.runelite.client.chat.QueuedMessage; import net.runelite.client.eventbus.EventBus; import net.runelite.client.eventbus.Subscribe; import net.runelite.client.events.PartyChanged; +import static net.runelite.client.util.Text.JAGEX_PRINTABLE_CHAR_MATCHER; import net.runelite.http.api.ws.messages.party.Join; import net.runelite.http.api.ws.messages.party.Part; +import net.runelite.http.api.ws.messages.party.PartyChatMessage; import net.runelite.http.api.ws.messages.party.UserJoin; import net.runelite.http.api.ws.messages.party.UserPart; import net.runelite.http.api.ws.messages.party.UserSync; @@ -49,10 +54,12 @@ import net.runelite.http.api.ws.messages.party.UserSync; public class PartyService { public static final int PARTY_MAX = 15; + private static final int MAX_MESSAGE_LEN = 150; private final WSClient wsClient; private final SessionManager sessionManager; private final EventBus eventBus; + private final ChatMessageManager chat; private final List members = new ArrayList<>(); @Getter @@ -65,11 +72,12 @@ public class PartyService private String username; @Inject - private PartyService(final WSClient wsClient, final SessionManager sessionManager, final EventBus eventBus) + private PartyService(final WSClient wsClient, final SessionManager sessionManager, final EventBus eventBus, final ChatMessageManager chat) { this.wsClient = wsClient; this.sessionManager = sessionManager; this.eventBus = eventBus; + this.chat = chat; } public void changeParty(UUID newParty) @@ -141,6 +149,27 @@ public class PartyService members.removeIf(member -> member.getMemberId().equals(message.getMemberId())); } + @Subscribe + public void onPartyChatMessage(final PartyChatMessage message) + { + // Remove non-printable characters, and tags from message + String sentMesage = JAGEX_PRINTABLE_CHAR_MATCHER.retainFrom(message.getValue()) + .replaceAll("", ""); + + // Cap the mesage length + if (sentMesage.length() > MAX_MESSAGE_LEN) + { + sentMesage = sentMesage.substring(0, MAX_MESSAGE_LEN); + } + + chat.queue(QueuedMessage.builder() + .type(ChatMessageType.FRIENDSCHAT) + .sender("Party") + .name(getMemberById(message.getMemberId()).getName()) + .runeLiteFormattedMessage(sentMesage) + .build()); + } + public PartyMember getLocalMember() { return getMemberByName(username);