Need help adding the 'Translate' menu option for translating selected Players messages.

Finished outgoing message translation however if the user has been limited by Google for the likes of using the Public Chat translation in over populated and spammy areas such as the GE they will not be able to send a message for upto 5 minutes while the Player Chat Translation config is enabled.

Need to think more about ways to handle this though once the selective translation has been completed we can safely remove the 'All' public chat messages part of the plugin to prevent users from being Limited by Google.
This commit is contained in:
Ian William O'Neill
2019-06-30 01:47:14 +01:00
committed by Ian W. ONeill
parent be50242909
commit 3c0e1bef47
2 changed files with 111 additions and 18 deletions

View File

@@ -10,23 +10,48 @@ public interface ChatTranslationConfig extends Config
@ConfigItem(
keyName = "publicChat",
name = "Translate All Public Chat?",
name = "Translate incoming Messages",
description = "Would you like to Translate Public Chat?",
position = 0
position = 0,
group = "Public Chat Translation"
)
default boolean publicChat() { return false; }
@ConfigItem(
keyName = "targetLanguage",
keyName = "publicTargetLanguage",
name = "Target Language",
description = "Language to translate messages too.",
position = 2,
position = 1,
group = "Public Chat Translation",
hidden = true,
unhide = "publicChat"
)
default Languages targetLanguage()
default Languages publicTargetLanguage()
{
return Languages.ENGLISH;
}
@ConfigItem(
keyName = "playerChat",
name = "Translate outgoing Messages",
description = "Would you like to Translate your Messages?",
position = 2,
group = "Player Message Translation"
)
default boolean playerChat() { return false; }
@ConfigItem(
keyName = "playerTargetLanguage",
name = "Target Language",
description = "Language to translate messages too.",
position = 3,
group = "Player Message Translation",
hidden = true,
unhide = "playerChat"
)
default Languages playerTargetLanguage()
{
return Languages.SPANISH;
}
}

View File

@@ -7,10 +7,14 @@ import net.runelite.api.*;
import net.runelite.api.events.ChatMessage;
import net.runelite.api.events.MenuEntryAdded;
import net.runelite.api.events.PlayerMenuOptionClicked;
import net.runelite.api.widgets.Widget;
import net.runelite.api.widgets.WidgetInfo;
import net.runelite.client.callback.ClientThread;
import net.runelite.client.chat.ChatMessageManager;
import net.runelite.client.config.ConfigManager;
import net.runelite.client.eventbus.Subscribe;
import net.runelite.client.input.KeyListener;
import net.runelite.client.input.KeyManager;
import net.runelite.client.menus.MenuManager;
import net.runelite.client.plugins.Plugin;
import net.runelite.client.plugins.PluginDescriptor;
@@ -20,6 +24,7 @@ import org.apache.commons.lang3.ArrayUtils;
import javax.annotation.Nullable;
import javax.inject.Inject;
import javax.inject.Provider;
import java.awt.event.KeyEvent;
@PluginDescriptor(
name = "Chat Translator",
@@ -27,21 +32,26 @@ import javax.inject.Provider;
tags = {"translate", "language", "english", "spanish", "dutch", "french"},
type = PluginType.UTILITY
)
public class ChatTranslationPlugin extends Plugin {
public class ChatTranslationPlugin extends Plugin implements KeyListener {
public static final String TRANSLATE = "Translate";
private static final ImmutableList<String> AFTER_OPTIONS = ImmutableList.of("Message", "Add ignore", "Remove friend", "Kick");
@Inject
@Nullable
private Client client;
@Inject
private ClientThread clientThread;
@Inject
private Provider<MenuManager> menuManager;
@Inject
private ChatMessageManager chatMessageManager;
@Inject
private KeyManager keyManager;
@Inject
private ChatTranslationConfig config;
@@ -58,6 +68,7 @@ public class ChatTranslationPlugin extends Plugin {
{
menuManager.get().addPlayerMenuItem(TRANSLATE);
}
keyManager.registerKeyListener(this);
}
@Override
@@ -67,6 +78,7 @@ public class ChatTranslationPlugin extends Plugin {
{
menuManager.get().removePlayerMenuItem(TRANSLATE);
}
keyManager.unregisterKeyListener(this);
}
@Subscribe
@@ -101,7 +113,10 @@ public class ChatTranslationPlugin extends Plugin {
lookup.setParam1(event.getActionParam1());
lookup.setIdentifier(event.getIdentifier());
insertMenuEntry(lookup, client.getMenuEntries());
MenuEntry[] newMenu = ObjectArrays.concat(lookup, client.getMenuEntries());
int menuEntryCount = newMenu.length;
ArrayUtils.swap(newMenu, menuEntryCount - 1, menuEntryCount - 2);
client.setMenuEntries(newMenu);
}
}
@@ -131,11 +146,13 @@ public class ChatTranslationPlugin extends Plugin {
try {
//Automatically check language of message and translate to selected language.
String translation = translator.translate("auto", config.targetLanguage().toString(), message);
final MessageNode messageNode = chatMessage.getMessageNode();
messageNode.setRuneLiteFormatMessage(translation);
chatMessageManager.update(messageNode);
String translation = translator.translate("auto", config.publicTargetLanguage().toString(), message);
if (translation != null)
{
final MessageNode messageNode = chatMessage.getMessageNode();
messageNode.setRuneLiteFormatMessage(translation);
chatMessageManager.update(messageNode);
}
} catch (Exception e) {
e.printStackTrace();
}
@@ -143,12 +160,63 @@ public class ChatTranslationPlugin extends Plugin {
client.refreshChat();
}
private void insertMenuEntry(MenuEntry newEntry, MenuEntry[] entries)
@Override
public void keyPressed(KeyEvent event) {
if (client.getGameState() != GameState.LOADING && client.getGameState() != GameState.LOGGED_IN) {
return;
}
if (!config.playerChat())
{
return;
}
Widget chatboxParent = client.getWidget(WidgetInfo.CHATBOX_PARENT);
if (chatboxParent != null && chatboxParent.getOnKeyListener() != null)
{
if (event.getKeyCode() == 0xA)
{
event.consume();
Translator translator = new Translator();
String message = client.getVar(VarClientStr.CHATBOX_TYPED_TEXT);
try {
//Automatically check language of message and translate to selected language.
String translation = translator.translate("auto", config.playerTargetLanguage().toString(), message);
if (translation != null)
{
client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, translation);
clientThread.invoke(() -> {
client.runScript(96, 0, translation);
});
}
client.setVar(VarClientStr.CHATBOX_TYPED_TEXT, "");
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
return;
}
}
@Override
public void keyReleased(KeyEvent e)
{
MenuEntry[] newMenu = ObjectArrays.concat(entries, newEntry);
int menuEntryCount = newMenu.length;
ArrayUtils.swap(newMenu, menuEntryCount - 1, menuEntryCount - 2);
client.setMenuEntries(newMenu);
// Nothing.
}
@Override
public void keyTyped(KeyEvent e)
{
// Nothing.
}
}