Fixes & debug & /lenny
Fixed cmd handling for real Added debug command (not the best for debugging commands) Stop send/receive threads on shutdown Allow /lenny for the unconnected
This commit is contained in:
parent
b350be608a
commit
0497d6c8ac
5 changed files with 67 additions and 8 deletions
|
@ -233,6 +233,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
ChromaBot.getInstance().updatePlayerList();
|
ChromaBot.getInstance().updatePlayerList();
|
||||||
try {
|
try {
|
||||||
SafeMode = true; // Stop interacting with Discord
|
SafeMode = true; // Stop interacting with Discord
|
||||||
|
MCChatListener.stop();
|
||||||
ChromaBot.delete();
|
ChromaBot.delete();
|
||||||
dc.changePresence(StatusType.IDLE, ActivityType.PLAYING, "Chromacraft"); //No longer using the same account for testing
|
dc.changePresence(StatusType.IDLE, ActivityType.PLAYING, "Chromacraft"); //No longer using the same account for testing
|
||||||
dc.logout();
|
dc.logout();
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
package buttondevteam.discordplugin.commands;
|
||||||
|
|
||||||
|
import buttondevteam.discordplugin.DiscordPlugin;
|
||||||
|
import buttondevteam.discordplugin.listeners.CommandListener;
|
||||||
|
import sx.blah.discord.handle.obj.IMessage;
|
||||||
|
|
||||||
|
public class DebugCommand extends DiscordCommandBase {
|
||||||
|
@Override
|
||||||
|
public String getCommandName() {
|
||||||
|
return "debug";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean run(IMessage message, String args) {
|
||||||
|
if (message.getAuthor().hasRole(DiscordPlugin.mainServer.getRoleByID(126030201472811008L)))
|
||||||
|
message.reply("Debug " + (CommandListener.debug() ? "enabled" : "disabled"));
|
||||||
|
else
|
||||||
|
message.reply("You need to be a moderator to use this command.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getHelpText() {
|
||||||
|
return new String[]{"Switches debug mode."};
|
||||||
|
}
|
||||||
|
}
|
|
@ -8,6 +8,8 @@ import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static buttondevteam.discordplugin.listeners.CommandListener.debug;
|
||||||
|
|
||||||
public abstract class DiscordCommandBase {
|
public abstract class DiscordCommandBase {
|
||||||
public abstract String getCommandName();
|
public abstract String getCommandName();
|
||||||
|
|
||||||
|
@ -24,9 +26,11 @@ public abstract class DiscordCommandBase {
|
||||||
commands.put("role", new RoleCommand());
|
commands.put("role", new RoleCommand());
|
||||||
commands.put("mcchat", new MCChatCommand());
|
commands.put("mcchat", new MCChatCommand());
|
||||||
commands.put("channelcon", new ChannelconCommand());
|
commands.put("channelcon", new ChannelconCommand());
|
||||||
|
commands.put("debug", new DebugCommand());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void runCommand(String cmd, String args, IMessage message) {
|
public static void runCommand(String cmd, String args, IMessage message) {
|
||||||
|
debug("F"); //Not sure if needed
|
||||||
DiscordCommandBase command = commands.get(cmd);
|
DiscordCommandBase command = commands.get(cmd);
|
||||||
if (command == null) {
|
if (command == null) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
|
@ -35,6 +39,7 @@ public abstract class DiscordCommandBase {
|
||||||
+ "help' for help");
|
+ "help' for help");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
debug("G");
|
||||||
try {
|
try {
|
||||||
if (!command.run(message, args))
|
if (!command.run(message, args))
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), Arrays.stream(command.getHelpText()).collect(Collectors.joining("\n")));
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), Arrays.stream(command.getHelpText()).collect(Collectors.joining("\n")));
|
||||||
|
@ -43,6 +48,7 @@ public abstract class DiscordCommandBase {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"An internal error occured while executing this command. For more technical details see the server-issues channel on the dev Discord.");
|
"An internal error occured while executing this command. For more technical details see the server-issues channel on the dev Discord.");
|
||||||
}
|
}
|
||||||
|
debug("H");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String[] splitargs(String args) {
|
protected String[] splitargs(String args) {
|
||||||
|
|
|
@ -160,8 +160,10 @@ public class CommandListener {
|
||||||
* @return Whether it ran the command (always true if mentionedonly is false)
|
* @return Whether it ran the command (always true if mentionedonly is false)
|
||||||
*/
|
*/
|
||||||
public static boolean runCommand(IMessage message, boolean mentionedonly) {
|
public static boolean runCommand(IMessage message, boolean mentionedonly) {
|
||||||
|
debug("A");
|
||||||
if (DiscordPlugin.SafeMode)
|
if (DiscordPlugin.SafeMode)
|
||||||
return true;
|
return true;
|
||||||
|
debug("B");
|
||||||
final StringBuilder cmdwithargs = new StringBuilder(message.getContent());
|
final StringBuilder cmdwithargs = new StringBuilder(message.getContent());
|
||||||
final String mention = DiscordPlugin.dc.getOurUser().mention(false);
|
final String mention = DiscordPlugin.dc.getOurUser().mention(false);
|
||||||
final String mentionNick = DiscordPlugin.dc.getOurUser().mention(true);
|
final String mentionNick = DiscordPlugin.dc.getOurUser().mention(true);
|
||||||
|
@ -169,26 +171,41 @@ public class CommandListener {
|
||||||
gotmention = checkanddeletemention(cmdwithargs, mentionNick, message) || gotmention;
|
gotmention = checkanddeletemention(cmdwithargs, mentionNick, message) || gotmention;
|
||||||
for (String mentionRole : (Iterable<String>) message.getRoleMentions().stream().filter(r -> DiscordPlugin.dc.getOurUser().hasRole(r)).map(r -> r.mention())::iterator)
|
for (String mentionRole : (Iterable<String>) message.getRoleMentions().stream().filter(r -> DiscordPlugin.dc.getOurUser().hasRole(r)).map(r -> r.mention())::iterator)
|
||||||
gotmention = checkanddeletemention(cmdwithargs, mentionRole, message) || gotmention; // Delete all mentions
|
gotmention = checkanddeletemention(cmdwithargs, mentionRole, message) || gotmention; // Delete all mentions
|
||||||
|
debug("C");
|
||||||
if (mentionedonly && !gotmention) {
|
if (mentionedonly && !gotmention) {
|
||||||
message.getChannel().setTypingStatus(false);
|
message.getChannel().setTypingStatus(false);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
debug("D");
|
||||||
message.getChannel().setTypingStatus(true);
|
message.getChannel().setTypingStatus(true);
|
||||||
int index = cmdwithargs.indexOf(" ");
|
String cmdwithargsString = cmdwithargs.toString().trim(); //Remove spaces between mention and command
|
||||||
|
int index = cmdwithargsString.indexOf(" ");
|
||||||
String cmd;
|
String cmd;
|
||||||
String args;
|
String args;
|
||||||
if (index == -1) {
|
if (index == -1) {
|
||||||
cmd = cmdwithargs.toString();
|
cmd = cmdwithargsString;
|
||||||
args = "";
|
args = "";
|
||||||
} else {
|
} else {
|
||||||
cmd = cmdwithargs.substring(0, index);
|
cmd = cmdwithargsString.substring(0, index);
|
||||||
args = cmdwithargs.substring(index + 1).trim(); //In case there are multiple spaces
|
args = cmdwithargsString.substring(index + 1).trim(); //In case there are multiple spaces
|
||||||
}
|
}
|
||||||
|
debug("E");
|
||||||
DiscordCommandBase.runCommand(cmd.toLowerCase(), args, message);
|
DiscordCommandBase.runCommand(cmd.toLowerCase(), args, message);
|
||||||
message.getChannel().setTypingStatus(false);
|
message.getChannel().setTypingStatus(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static boolean debug = false;
|
||||||
|
|
||||||
|
public static void debug(String debug) {
|
||||||
|
if (CommandListener.debug) //Debug
|
||||||
|
System.out.println(debug);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean debug() {
|
||||||
|
return debug = !debug;
|
||||||
|
}
|
||||||
|
|
||||||
private static boolean checkanddeletemention(StringBuilder cmdwithargs, String mention, IMessage message) {
|
private static boolean checkanddeletemention(StringBuilder cmdwithargs, String mention, IMessage message) {
|
||||||
if (message.getContent().startsWith(mention)) // TODO: Resolve mentions: Compound arguments, either a mention or text
|
if (message.getContent().startsWith(mention)) // TODO: Resolve mentions: Compound arguments, either a mention or text
|
||||||
if (cmdwithargs.length() > mention.length() + 1)
|
if (cmdwithargs.length() > mention.length() + 1)
|
||||||
|
|
|
@ -45,6 +45,7 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
private BukkitTask sendtask;
|
private BukkitTask sendtask;
|
||||||
private LinkedBlockingQueue<AbstractMap.SimpleEntry<TBMCChatEvent, Instant>> sendevents = new LinkedBlockingQueue<>();
|
private LinkedBlockingQueue<AbstractMap.SimpleEntry<TBMCChatEvent, Instant>> sendevents = new LinkedBlockingQueue<>();
|
||||||
private Runnable sendrunnable;
|
private Runnable sendrunnable;
|
||||||
|
private static Thread sendthread;
|
||||||
|
|
||||||
@EventHandler // Minecraft
|
@EventHandler // Minecraft
|
||||||
public void onMCChat(TBMCChatEvent ev) {
|
public void onMCChat(TBMCChatEvent ev) {
|
||||||
|
@ -54,6 +55,7 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
if (sendtask != null)
|
if (sendtask != null)
|
||||||
return;
|
return;
|
||||||
sendrunnable = () -> {
|
sendrunnable = () -> {
|
||||||
|
sendthread = Thread.currentThread();
|
||||||
processMCToDiscord();
|
processMCToDiscord();
|
||||||
sendtask = Bukkit.getScheduler().runTaskAsynchronously(DiscordPlugin.plugin, sendrunnable);
|
sendtask = Bukkit.getScheduler().runTaskAsynchronously(DiscordPlugin.plugin, sendrunnable);
|
||||||
};
|
};
|
||||||
|
@ -121,13 +123,13 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
|| ((DiscordSenderBase) e.getSender()).getChannel().getLongID() != ch.getLongID();
|
|| ((DiscordSenderBase) e.getSender()).getChannel().getLongID() != ch.getLongID();
|
||||||
|
|
||||||
if ((e.getChannel() == Channel.GlobalChat || e.getChannel().ID.equals("rp"))
|
if ((e.getChannel() == Channel.GlobalChat || e.getChannel().ID.equals("rp"))
|
||||||
&& (!e.isFromcmd() || isdifferentchannel.test(DiscordPlugin.chatchannel)))
|
&& (e.isFromcmd() || isdifferentchannel.test(DiscordPlugin.chatchannel)))
|
||||||
doit.accept(lastmsgdata == null
|
doit.accept(lastmsgdata == null
|
||||||
? lastmsgdata = new LastMsgData(DiscordPlugin.chatchannel, null, null)
|
? lastmsgdata = new LastMsgData(DiscordPlugin.chatchannel, null, null)
|
||||||
: lastmsgdata);
|
: lastmsgdata);
|
||||||
|
|
||||||
for (LastMsgData data : lastmsgPerUser) {
|
for (LastMsgData data : lastmsgPerUser) {
|
||||||
if (data.dp.isMinecraftChatEnabled() && isdifferentchannel.test(data.channel)
|
if (data.dp.isMinecraftChatEnabled() && (e.isFromcmd() || isdifferentchannel.test(data.channel))
|
||||||
&& e.shouldSendTo(getSender(data.channel, data.user, data.dp)))
|
&& e.shouldSendTo(getSender(data.channel, data.user, data.dp)))
|
||||||
doit.accept(data);
|
doit.accept(data);
|
||||||
}
|
}
|
||||||
|
@ -168,7 +170,7 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final String[] UnconnectedCmds = new String[]{"list", "u", "shrug", "tableflip", "unflip", "mwiki",
|
private static final String[] UnconnectedCmds = new String[]{"list", "u", "shrug", "tableflip", "unflip", "mwiki",
|
||||||
"yeehaw"};
|
"yeehaw", "lenny"};
|
||||||
|
|
||||||
private static LastMsgData lastmsgdata;
|
private static LastMsgData lastmsgdata;
|
||||||
private static short lastlist = 0;
|
private static short lastlist = 0;
|
||||||
|
@ -286,10 +288,16 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
action.accept(data.channel);
|
action.accept(data.channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void stop() {
|
||||||
|
if (sendthread != null) sendthread.interrupt();
|
||||||
|
if (recthread != null) recthread.interrupt();
|
||||||
|
}
|
||||||
|
|
||||||
private BukkitTask rectask;
|
private BukkitTask rectask;
|
||||||
private LinkedBlockingQueue<MessageReceivedEvent> recevents = new LinkedBlockingQueue<>();
|
private LinkedBlockingQueue<MessageReceivedEvent> recevents = new LinkedBlockingQueue<>();
|
||||||
private IMessage lastmsgfromd; // Last message sent by a Discord user, used for clearing checkmarks
|
private IMessage lastmsgfromd; // Last message sent by a Discord user, used for clearing checkmarks
|
||||||
private Runnable recrun;
|
private Runnable recrun;
|
||||||
|
private static Thread recthread;
|
||||||
|
|
||||||
@Override // Discord
|
@Override // Discord
|
||||||
public void handle(MessageReceivedEvent ev) {
|
public void handle(MessageReceivedEvent ev) {
|
||||||
|
@ -314,6 +322,7 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
if (rectask != null)
|
if (rectask != null)
|
||||||
return;
|
return;
|
||||||
recrun = () -> { //Don't return in a while loop next time
|
recrun = () -> { //Don't return in a while loop next time
|
||||||
|
recthread = Thread.currentThread();
|
||||||
processDiscordToMC();
|
processDiscordToMC();
|
||||||
rectask = Bukkit.getScheduler().runTaskAsynchronously(DiscordPlugin.plugin, recrun); //Continue message processing
|
rectask = Bukkit.getScheduler().runTaskAsynchronously(DiscordPlugin.plugin, recrun); //Continue message processing
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue