client: add chat command manager
This commit is contained in:
@@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, Adam <Adam@sigterm.info>
|
||||||
|
* 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.client.chat;
|
||||||
|
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.BiPredicate;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Getter;
|
||||||
|
import net.runelite.api.events.SetMessage;
|
||||||
|
import net.runelite.client.events.ChatInput;
|
||||||
|
|
||||||
|
@AllArgsConstructor
|
||||||
|
@Getter
|
||||||
|
class ChatCommand
|
||||||
|
{
|
||||||
|
private final String name;
|
||||||
|
private boolean async;
|
||||||
|
private final BiConsumer<SetMessage, String> execute;
|
||||||
|
private final BiPredicate<ChatInput, String> input;
|
||||||
|
}
|
||||||
@@ -0,0 +1,197 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2019, Adam <Adam@sigterm.info>
|
||||||
|
* 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.client.chat;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ScheduledExecutorService;
|
||||||
|
import java.util.function.BiConsumer;
|
||||||
|
import java.util.function.BiPredicate;
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import net.runelite.api.Client;
|
||||||
|
import net.runelite.api.GameState;
|
||||||
|
import net.runelite.api.events.SetMessage;
|
||||||
|
import net.runelite.client.eventbus.EventBus;
|
||||||
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
|
import net.runelite.client.events.ChatInput;
|
||||||
|
import net.runelite.client.events.ChatboxInput;
|
||||||
|
import net.runelite.client.events.PrivateMessageInput;
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
@Slf4j
|
||||||
|
public class ChatCommandManager implements ChatboxInputListener
|
||||||
|
{
|
||||||
|
private final Map<String, ChatCommand> commands = new HashMap<>();
|
||||||
|
|
||||||
|
private final Client client;
|
||||||
|
private final ScheduledExecutorService scheduledExecutorService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ChatCommandManager(EventBus eventBus, CommandManager commandManager, Client client, ScheduledExecutorService scheduledExecutorService)
|
||||||
|
{
|
||||||
|
this.client = client;
|
||||||
|
this.scheduledExecutorService = scheduledExecutorService;
|
||||||
|
eventBus.register(this);
|
||||||
|
commandManager.register(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCommand(String command, BiConsumer<SetMessage, String> execute)
|
||||||
|
{
|
||||||
|
registerCommand(command, execute, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCommand(String command, BiConsumer<SetMessage, String> execute, BiPredicate<ChatInput, String> input)
|
||||||
|
{
|
||||||
|
commands.put(command.toLowerCase(), new ChatCommand(command, false, execute, input));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCommandAsync(String command, BiConsumer<SetMessage, String> execute)
|
||||||
|
{
|
||||||
|
registerCommandAsync(command, execute, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void registerCommandAsync(String command, BiConsumer<SetMessage, String> execute, BiPredicate<ChatInput, String> input)
|
||||||
|
{
|
||||||
|
commands.put(command.toLowerCase(), new ChatCommand(command, true, execute, input));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void unregisterCommand(String command)
|
||||||
|
{
|
||||||
|
commands.remove(command.toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Subscribe
|
||||||
|
public void onSetMessage(SetMessage setMessage)
|
||||||
|
{
|
||||||
|
if (client.getGameState() != GameState.LOGGED_IN)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (setMessage.getType())
|
||||||
|
{
|
||||||
|
case PUBLIC:
|
||||||
|
case PUBLIC_MOD:
|
||||||
|
case CLANCHAT:
|
||||||
|
case PRIVATE_MESSAGE_RECEIVED:
|
||||||
|
case PRIVATE_MESSAGE_SENT:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String message = setMessage.getValue();
|
||||||
|
|
||||||
|
String command = extractCommand(message);
|
||||||
|
if (command == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatCommand chatCommand = commands.get(command.toLowerCase());
|
||||||
|
if (chatCommand == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chatCommand.isAsync())
|
||||||
|
{
|
||||||
|
scheduledExecutorService.execute(() -> chatCommand.getExecute().accept(setMessage, message));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
chatCommand.getExecute().accept(setMessage, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onChatboxInput(ChatboxInput chatboxInput)
|
||||||
|
{
|
||||||
|
String message = chatboxInput.getValue();
|
||||||
|
if (message.startsWith("/"))
|
||||||
|
{
|
||||||
|
message = message.substring(1); // clan chat input
|
||||||
|
}
|
||||||
|
|
||||||
|
String command = extractCommand(message);
|
||||||
|
if (command == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatCommand chatCommand = commands.get(command.toLowerCase());
|
||||||
|
if (chatCommand == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BiPredicate<ChatInput, String> input = chatCommand.getInput();
|
||||||
|
if (input == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return input.test(chatboxInput, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onPrivateMessageInput(PrivateMessageInput privateMessageInput)
|
||||||
|
{
|
||||||
|
final String message = privateMessageInput.getMessage();
|
||||||
|
|
||||||
|
String command = extractCommand(message);
|
||||||
|
if (command == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatCommand chatCommand = commands.get(command.toLowerCase());
|
||||||
|
if (chatCommand == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
BiPredicate<ChatInput, String> input = chatCommand.getInput();
|
||||||
|
if (input == null)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return input.test(privateMessageInput, message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String extractCommand(String message)
|
||||||
|
{
|
||||||
|
int idx = message.indexOf(' ');
|
||||||
|
if (idx == -1)
|
||||||
|
{
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
return message.substring(0, idx);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2018, Adam <Adam@sigterm.info>
|
||||||
|
* 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.client.events;
|
||||||
|
|
||||||
|
public abstract class ChatInput
|
||||||
|
{
|
||||||
|
public abstract void resume();
|
||||||
|
}
|
||||||
@@ -27,10 +27,8 @@ package net.runelite.client.events;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public abstract class ChatboxInput
|
public abstract class ChatboxInput extends ChatInput
|
||||||
{
|
{
|
||||||
private final String value;
|
private final String value;
|
||||||
private final int chatType;
|
private final int chatType;
|
||||||
|
|
||||||
public abstract void resume();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,10 +27,8 @@ package net.runelite.client.events;
|
|||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public abstract class PrivateMessageInput
|
public abstract class PrivateMessageInput extends ChatInput
|
||||||
{
|
{
|
||||||
private final String target;
|
private final String target;
|
||||||
private final String message;
|
private final String message;
|
||||||
|
|
||||||
public abstract void resume();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,27 +37,25 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import net.runelite.api.ChatMessageType;
|
import net.runelite.api.ChatMessageType;
|
||||||
import net.runelite.api.Client;
|
import net.runelite.api.Client;
|
||||||
import net.runelite.api.Experience;
|
import net.runelite.api.Experience;
|
||||||
import net.runelite.api.GameState;
|
|
||||||
import net.runelite.api.IconID;
|
import net.runelite.api.IconID;
|
||||||
import net.runelite.api.ItemComposition;
|
import net.runelite.api.ItemComposition;
|
||||||
import net.runelite.api.MessageNode;
|
import net.runelite.api.MessageNode;
|
||||||
import net.runelite.api.events.ChatMessage;
|
import net.runelite.api.events.ChatMessage;
|
||||||
import net.runelite.api.events.GameTick;
|
import net.runelite.api.events.GameTick;
|
||||||
import net.runelite.api.events.SetMessage;
|
import net.runelite.api.events.SetMessage;
|
||||||
|
import net.runelite.api.events.VarbitChanged;
|
||||||
import net.runelite.api.events.WidgetLoaded;
|
import net.runelite.api.events.WidgetLoaded;
|
||||||
import net.runelite.api.vars.AccountType;
|
import net.runelite.api.vars.AccountType;
|
||||||
import net.runelite.api.widgets.Widget;
|
import net.runelite.api.widgets.Widget;
|
||||||
import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID;
|
import static net.runelite.api.widgets.WidgetID.KILL_LOGS_GROUP_ID;
|
||||||
import net.runelite.api.widgets.WidgetInfo;
|
import net.runelite.api.widgets.WidgetInfo;
|
||||||
import net.runelite.client.chat.ChatColorType;
|
import net.runelite.client.chat.ChatColorType;
|
||||||
|
import net.runelite.client.chat.ChatCommandManager;
|
||||||
import net.runelite.client.chat.ChatMessageBuilder;
|
import net.runelite.client.chat.ChatMessageBuilder;
|
||||||
import net.runelite.client.chat.ChatMessageManager;
|
import net.runelite.client.chat.ChatMessageManager;
|
||||||
import net.runelite.client.chat.ChatboxInputListener;
|
|
||||||
import net.runelite.client.chat.CommandManager;
|
|
||||||
import net.runelite.client.config.ConfigManager;
|
import net.runelite.client.config.ConfigManager;
|
||||||
import net.runelite.client.eventbus.Subscribe;
|
import net.runelite.client.eventbus.Subscribe;
|
||||||
import net.runelite.client.events.ChatboxInput;
|
import net.runelite.client.events.ChatInput;
|
||||||
import net.runelite.client.events.PrivateMessageInput;
|
|
||||||
import net.runelite.client.game.ItemManager;
|
import net.runelite.client.game.ItemManager;
|
||||||
import net.runelite.client.input.KeyManager;
|
import net.runelite.client.input.KeyManager;
|
||||||
import net.runelite.client.plugins.Plugin;
|
import net.runelite.client.plugins.Plugin;
|
||||||
@@ -78,7 +76,7 @@ import net.runelite.http.api.kc.KillCountClient;
|
|||||||
tags = {"grand", "exchange", "level", "prices"}
|
tags = {"grand", "exchange", "level", "prices"}
|
||||||
)
|
)
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
public class ChatCommandsPlugin extends Plugin
|
||||||
{
|
{
|
||||||
private static final float HIGH_ALCHEMY_CONSTANT = 0.6f;
|
private static final float HIGH_ALCHEMY_CONSTANT = 0.6f;
|
||||||
private static final Pattern KILLCOUNT_PATTERN = Pattern.compile("Your (.+) kill count is: <col=ff0000>(\\d+)</col>.");
|
private static final Pattern KILLCOUNT_PATTERN = Pattern.compile("Your (.+) kill count is: <col=ff0000>(\\d+)</col>.");
|
||||||
@@ -96,6 +94,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
private final KillCountClient killCountClient = new KillCountClient();
|
private final KillCountClient killCountClient = new KillCountClient();
|
||||||
|
|
||||||
private boolean logKills;
|
private boolean logKills;
|
||||||
|
private HiscoreEndpoint hiscoreEndpoint; // hiscore endpoint for current player
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private Client client;
|
private Client client;
|
||||||
@@ -112,6 +111,9 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
@Inject
|
@Inject
|
||||||
private ChatMessageManager chatMessageManager;
|
private ChatMessageManager chatMessageManager;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private ChatCommandManager chatCommandManager;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ScheduledExecutorService executor;
|
private ScheduledExecutorService executor;
|
||||||
|
|
||||||
@@ -121,21 +123,30 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
@Inject
|
@Inject
|
||||||
private ChatKeyboardListener chatKeyboardListener;
|
private ChatKeyboardListener chatKeyboardListener;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private CommandManager commandManager;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void startUp()
|
public void startUp()
|
||||||
{
|
{
|
||||||
keyManager.registerKeyListener(chatKeyboardListener);
|
keyManager.registerKeyListener(chatKeyboardListener);
|
||||||
commandManager.register(this);
|
|
||||||
|
chatCommandManager.registerCommandAsync(TOTAL_LEVEL_COMMAND_STRING, this::playerSkillLookup);
|
||||||
|
chatCommandManager.registerCommandAsync(CMB_COMMAND_STRING, this::combatLevelLookup);
|
||||||
|
chatCommandManager.registerCommand(PRICE_COMMAND_STRING, this::itemPriceLookup);
|
||||||
|
chatCommandManager.registerCommandAsync(LEVEL_COMMAND_STRING, this::playerSkillLookup);
|
||||||
|
chatCommandManager.registerCommandAsync(CLUES_COMMAND_STRING, this::clueLookup);
|
||||||
|
chatCommandManager.registerCommandAsync(KILLCOUNT_COMMAND_STRING, this::killCountLookup, this::killCountSubmit);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shutDown()
|
public void shutDown()
|
||||||
{
|
{
|
||||||
keyManager.unregisterKeyListener(chatKeyboardListener);
|
keyManager.unregisterKeyListener(chatKeyboardListener);
|
||||||
commandManager.unregister(this);
|
|
||||||
|
chatCommandManager.unregisterCommand(TOTAL_LEVEL_COMMAND_STRING);
|
||||||
|
chatCommandManager.unregisterCommand(CMB_COMMAND_STRING);
|
||||||
|
chatCommandManager.unregisterCommand(PRICE_COMMAND_STRING);
|
||||||
|
chatCommandManager.unregisterCommand(LEVEL_COMMAND_STRING);
|
||||||
|
chatCommandManager.unregisterCommand(CLUES_COMMAND_STRING);
|
||||||
|
chatCommandManager.unregisterCommand(KILLCOUNT_COMMAND_STRING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides
|
@Provides
|
||||||
@@ -157,84 +168,6 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
return killCount == null ? 0 : killCount;
|
return killCount == null ? 0 : killCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if the chat message is a command.
|
|
||||||
*
|
|
||||||
* @param setMessage The chat message.
|
|
||||||
*/
|
|
||||||
@Subscribe
|
|
||||||
public void onSetMessage(SetMessage setMessage)
|
|
||||||
{
|
|
||||||
if (client.getGameState() != GameState.LOGGED_IN)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (setMessage.getType())
|
|
||||||
{
|
|
||||||
case PUBLIC:
|
|
||||||
case PUBLIC_MOD:
|
|
||||||
case CLANCHAT:
|
|
||||||
case PRIVATE_MESSAGE_RECEIVED:
|
|
||||||
case PRIVATE_MESSAGE_SENT:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String message = setMessage.getValue();
|
|
||||||
MessageNode messageNode = setMessage.getMessageNode();
|
|
||||||
HiscoreEndpoint localEndpoint = getHiscoreEndpointType();
|
|
||||||
|
|
||||||
// clear RuneLite formatted message as the message node is
|
|
||||||
// being reused
|
|
||||||
messageNode.setRuneLiteFormatMessage(null);
|
|
||||||
|
|
||||||
if (config.lvl() && message.toLowerCase().equals(TOTAL_LEVEL_COMMAND_STRING))
|
|
||||||
{
|
|
||||||
log.debug("Running total level lookup");
|
|
||||||
executor.submit(() -> playerSkillLookup(setMessage, localEndpoint, "total"));
|
|
||||||
}
|
|
||||||
else if (config.lvl() && message.toLowerCase().equals(CMB_COMMAND_STRING))
|
|
||||||
{
|
|
||||||
log.debug("Running combat level lookup");
|
|
||||||
executor.submit(() -> combatLevelLookup(setMessage.getType(), setMessage));
|
|
||||||
}
|
|
||||||
else if (config.price() && message.toLowerCase().startsWith(PRICE_COMMAND_STRING + " "))
|
|
||||||
{
|
|
||||||
String search = message.substring(PRICE_COMMAND_STRING.length() + 1);
|
|
||||||
|
|
||||||
log.debug("Running price lookup for {}", search);
|
|
||||||
itemPriceLookup(setMessage.getMessageNode(), search);
|
|
||||||
}
|
|
||||||
else if (config.lvl() && message.toLowerCase().startsWith(LEVEL_COMMAND_STRING + " "))
|
|
||||||
{
|
|
||||||
String search = message.substring(LEVEL_COMMAND_STRING.length() + 1);
|
|
||||||
|
|
||||||
log.debug("Running level lookup for {}", search);
|
|
||||||
executor.submit(() -> playerSkillLookup(setMessage, localEndpoint, search));
|
|
||||||
}
|
|
||||||
else if (config.clue() && message.toLowerCase().equals(CLUES_COMMAND_STRING))
|
|
||||||
{
|
|
||||||
log.debug("Running lookup for overall clues");
|
|
||||||
executor.submit(() -> playerClueLookup(setMessage, localEndpoint, "total"));
|
|
||||||
}
|
|
||||||
else if (config.clue() && message.toLowerCase().startsWith(CLUES_COMMAND_STRING + " "))
|
|
||||||
{
|
|
||||||
String search = message.substring(CLUES_COMMAND_STRING.length() + 1);
|
|
||||||
|
|
||||||
log.debug("Running clue lookup for {}", search);
|
|
||||||
executor.submit(() -> playerClueLookup(setMessage, localEndpoint, search));
|
|
||||||
}
|
|
||||||
else if (config.killcount() && message.toLowerCase().startsWith(KILLCOUNT_COMMAND_STRING + " "))
|
|
||||||
{
|
|
||||||
String search = message.substring(KILLCOUNT_COMMAND_STRING.length() + 1);
|
|
||||||
|
|
||||||
log.debug("Running killcount lookup for {}", search);
|
|
||||||
executor.submit(() -> killCountLookup(setMessage.getType(), setMessage, search));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onChatMessage(ChatMessage chatMessage)
|
public void onChatMessage(ChatMessage chatMessage)
|
||||||
{
|
{
|
||||||
@@ -329,15 +262,14 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
logKills = true;
|
logKills = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Subscribe
|
||||||
public boolean onChatboxInput(ChatboxInput chatboxInput)
|
public void onVarbitChanged(VarbitChanged varbitChanged)
|
||||||
{
|
{
|
||||||
final String value = chatboxInput.getValue();
|
hiscoreEndpoint = getLocalHiscoreEndpointType();
|
||||||
if (!config.killcount() || !value.startsWith("!kc ") && !value.startsWith("/!kc "))
|
}
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private boolean killCountSubmit(ChatInput chatInput, String value)
|
||||||
|
{
|
||||||
int idx = value.indexOf(' ');
|
int idx = value.indexOf(' ');
|
||||||
final String boss = longBossName(value.substring(idx + 1));
|
final String boss = longBossName(value.substring(idx + 1));
|
||||||
|
|
||||||
@@ -361,54 +293,23 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
chatboxInput.resume();
|
chatInput.resume();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void killCountLookup(SetMessage setMessage, String message)
|
||||||
public boolean onPrivateMessageInput(PrivateMessageInput privateMessageInput)
|
|
||||||
{
|
{
|
||||||
final String message = privateMessageInput.getMessage();
|
if (!config.killcount())
|
||||||
if (!config.killcount() || !message.startsWith("!kc "))
|
|
||||||
{
|
{
|
||||||
return false;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int idx = message.indexOf(' ');
|
ChatMessageType type = setMessage.getType();
|
||||||
final String boss = longBossName(message.substring(idx + 1));
|
String search = message.substring(KILLCOUNT_COMMAND_STRING.length() + 1);
|
||||||
|
|
||||||
final int kc = getKc(boss);
|
|
||||||
if (kc <= 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final String playerName = client.getLocalPlayer().getName();
|
|
||||||
|
|
||||||
executor.execute(() ->
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
killCountClient.submit(playerName, boss, kc);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
log.warn("unable to submit killcount", ex);
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
privateMessageInput.resume();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void killCountLookup(ChatMessageType type, SetMessage setMessage, String search)
|
|
||||||
{
|
|
||||||
final String player;
|
final String player;
|
||||||
if (type.equals(ChatMessageType.PRIVATE_MESSAGE_SENT))
|
if (type.equals(ChatMessageType.PRIVATE_MESSAGE_SENT))
|
||||||
{
|
{
|
||||||
@@ -452,11 +353,19 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
* Looks up the item price and changes the original message to the
|
* Looks up the item price and changes the original message to the
|
||||||
* response.
|
* response.
|
||||||
*
|
*
|
||||||
* @param messageNode The chat message containing the command.
|
* @param setMessage The chat message containing the command.
|
||||||
* @param search The item given with the command.
|
* @param message The chat message
|
||||||
*/
|
*/
|
||||||
private void itemPriceLookup(MessageNode messageNode, String search)
|
private void itemPriceLookup(SetMessage setMessage, String message)
|
||||||
{
|
{
|
||||||
|
if (!config.price())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
MessageNode messageNode = setMessage.getMessageNode();
|
||||||
|
String search = message.substring(PRICE_COMMAND_STRING.length() + 1);
|
||||||
|
|
||||||
List<ItemPrice> results = itemManager.search(search);
|
List<ItemPrice> results = itemManager.search(search);
|
||||||
|
|
||||||
if (!results.isEmpty())
|
if (!results.isEmpty())
|
||||||
@@ -501,11 +410,25 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
* response.
|
* response.
|
||||||
*
|
*
|
||||||
* @param setMessage The chat message containing the command.
|
* @param setMessage The chat message containing the command.
|
||||||
* @param local HiscoreEndpoint for local player, needs to be sent in advance to avoid threading bugs
|
* @param message The chat message
|
||||||
* @param search The item given with the command.
|
|
||||||
*/
|
*/
|
||||||
private void playerSkillLookup(SetMessage setMessage, HiscoreEndpoint local, String search)
|
private void playerSkillLookup(SetMessage setMessage, String message)
|
||||||
{
|
{
|
||||||
|
if (!config.lvl())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String search;
|
||||||
|
if (message.equalsIgnoreCase(TOTAL_LEVEL_COMMAND_STRING))
|
||||||
|
{
|
||||||
|
search = "total";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
search = message.substring(LEVEL_COMMAND_STRING.length() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
search = SkillAbbreviations.getFullName(search);
|
search = SkillAbbreviations.getFullName(search);
|
||||||
final HiscoreSkill skill;
|
final HiscoreSkill skill;
|
||||||
try
|
try
|
||||||
@@ -517,7 +440,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final HiscoreLookup lookup = getCorrectLookupFor(setMessage, local);
|
final HiscoreLookup lookup = getCorrectLookupFor(setMessage);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -558,8 +481,15 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void combatLevelLookup(ChatMessageType type, SetMessage setMessage)
|
private void combatLevelLookup(SetMessage setMessage, String message)
|
||||||
{
|
{
|
||||||
|
if (!config.lvl())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ChatMessageType type = setMessage.getType();
|
||||||
|
|
||||||
String player;
|
String player;
|
||||||
if (type == ChatMessageType.PRIVATE_MESSAGE_SENT)
|
if (type == ChatMessageType.PRIVATE_MESSAGE_SENT)
|
||||||
{
|
{
|
||||||
@@ -636,18 +566,28 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
private void clueLookup(SetMessage setMessage, String message)
|
||||||
* Looks up the quantities of clues completed
|
|
||||||
* for the requested clue-level (no arg if requesting total)
|
|
||||||
* easy, medium, hard, elite, master
|
|
||||||
*/
|
|
||||||
private void playerClueLookup(SetMessage setMessage, HiscoreEndpoint local, String search)
|
|
||||||
{
|
{
|
||||||
final HiscoreLookup lookup = getCorrectLookupFor(setMessage, local);
|
if (!config.clue())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String search;
|
||||||
|
|
||||||
|
if (message.equalsIgnoreCase(CLUES_COMMAND_STRING))
|
||||||
|
{
|
||||||
|
search = "total";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
search = message.substring(CLUES_COMMAND_STRING.length() + 1);
|
||||||
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Skill hiscoreSkill;
|
final Skill hiscoreSkill;
|
||||||
|
final HiscoreLookup lookup = getCorrectLookupFor(setMessage);
|
||||||
final HiscoreResult result = hiscoreClient.lookup(lookup.getName(), lookup.getEndpoint());
|
final HiscoreResult result = hiscoreClient.lookup(lookup.getName(), lookup.getEndpoint());
|
||||||
|
|
||||||
if (result == null)
|
if (result == null)
|
||||||
@@ -720,10 +660,9 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
* Gets correct lookup data for message
|
* Gets correct lookup data for message
|
||||||
*
|
*
|
||||||
* @param setMessage chat message
|
* @param setMessage chat message
|
||||||
* @param local HiscoreEndpoint for local player, needs to be sent in advance to avoid threading bugs
|
|
||||||
* @return hiscore lookup data
|
* @return hiscore lookup data
|
||||||
*/
|
*/
|
||||||
private HiscoreLookup getCorrectLookupFor(final SetMessage setMessage, final HiscoreEndpoint local)
|
private HiscoreLookup getCorrectLookupFor(final SetMessage setMessage)
|
||||||
{
|
{
|
||||||
final String player;
|
final String player;
|
||||||
final HiscoreEndpoint ironmanStatus;
|
final HiscoreEndpoint ironmanStatus;
|
||||||
@@ -731,7 +670,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
if (setMessage.getType().equals(ChatMessageType.PRIVATE_MESSAGE_SENT))
|
if (setMessage.getType().equals(ChatMessageType.PRIVATE_MESSAGE_SENT))
|
||||||
{
|
{
|
||||||
player = client.getLocalPlayer().getName();
|
player = client.getLocalPlayer().getName();
|
||||||
ironmanStatus = local;
|
ironmanStatus = hiscoreEndpoint;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -740,7 +679,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
if (player.equals(client.getLocalPlayer().getName()))
|
if (player.equals(client.getLocalPlayer().getName()))
|
||||||
{
|
{
|
||||||
// Get ironman status from for the local player
|
// Get ironman status from for the local player
|
||||||
ironmanStatus = getHiscoreEndpointType();
|
ironmanStatus = hiscoreEndpoint;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -799,7 +738,7 @@ public class ChatCommandsPlugin extends Plugin implements ChatboxInputListener
|
|||||||
*
|
*
|
||||||
* @return hiscore endpoint
|
* @return hiscore endpoint
|
||||||
*/
|
*/
|
||||||
private HiscoreEndpoint getHiscoreEndpointType()
|
private HiscoreEndpoint getLocalHiscoreEndpointType()
|
||||||
{
|
{
|
||||||
return toEndPoint(client.getAccountType());
|
return toEndPoint(client.getAccountType());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user