Channel connect, fixes
- To do or not to do - Fixed args handling regarding whitespace - Showing the help text for cmds when needed - Fixed userinfo cmd not accepting spaces while Discord does - Moved command registration to start, not the initializer -- Prevents possible deadlocks according to IntelliJ - Other fixes
This commit is contained in:
parent
fba5c5b49a
commit
aabdd3a914
14 changed files with 129 additions and 129 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -131,7 +131,7 @@ publish/
|
||||||
*.publishproj
|
*.publishproj
|
||||||
|
|
||||||
# NuGet Packages Directory
|
# NuGet Packages Directory
|
||||||
## TODO: If you have NuGet Package Restore enabled, uncomment the next line
|
## TO!DO: If you have NuGet Package Restore enabled, uncomment the next line
|
||||||
#packages/
|
#packages/
|
||||||
|
|
||||||
# Windows Azure Build Output
|
# Windows Azure Build Output
|
||||||
|
|
3
pom.xml
3
pom.xml
|
@ -58,7 +58,7 @@
|
||||||
<exclude>org.spigotmc:spigot-api</exclude>
|
<exclude>org.spigotmc:spigot-api</exclude>
|
||||||
<exclude>com.github.TBMCPlugins.ButtonCore:ButtonCore</exclude>
|
<exclude>com.github.TBMCPlugins.ButtonCore:ButtonCore</exclude>
|
||||||
<exclude>net.ess3:Essentials</exclude>
|
<exclude>net.ess3:Essentials</exclude>
|
||||||
</excludes> <!-- TODO: http://stackoverflow.com/questions/28458058/maven-shade-plugin-exclude-a-dependency-and-all-its-transitive-dependencies -->
|
</excludes> <!-- http://stackoverflow.com/questions/28458058/maven-shade-plugin-exclude-a-dependency-and-all-its-transitive-dependencies -->
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
</configuration>
|
</configuration>
|
||||||
</execution>
|
</execution>
|
||||||
|
@ -180,6 +180,7 @@
|
||||||
<groupId>net.ess3</groupId>
|
<groupId>net.ess3</groupId>
|
||||||
<artifactId>Essentials</artifactId>
|
<artifactId>Essentials</artifactId>
|
||||||
<version>2.13.1</version>
|
<version>2.13.1</version>
|
||||||
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.xaanit</groupId>
|
<groupId>com.github.xaanit</groupId>
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package buttondevteam.discordplugin;
|
package buttondevteam.discordplugin;
|
||||||
|
|
||||||
|
import buttondevteam.discordplugin.commands.DiscordCommandBase;
|
||||||
import buttondevteam.discordplugin.listeners.*;
|
import buttondevteam.discordplugin.listeners.*;
|
||||||
import buttondevteam.discordplugin.mccommands.DiscordMCCommandBase;
|
import buttondevteam.discordplugin.mccommands.DiscordMCCommandBase;
|
||||||
import buttondevteam.lib.TBMCCoreAPI;
|
import buttondevteam.lib.TBMCCoreAPI;
|
||||||
|
@ -132,6 +133,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
new ChromaBot(this).updatePlayerList();
|
new ChromaBot(this).updatePlayerList();
|
||||||
//Get all roles with the default color
|
//Get all roles with the default color
|
||||||
GameRoles = mainServer.getRoles().stream().filter(r -> r.getColor().getAlpha() == 0).map(IRole::getName).collect(Collectors.toList());
|
GameRoles = mainServer.getRoles().stream().filter(r -> r.getColor().getAlpha() == 0).map(IRole::getName).collect(Collectors.toList());
|
||||||
|
DiscordCommandBase.registerCommands();
|
||||||
if (getConfig().getBoolean("serverup", false)) {
|
if (getConfig().getBoolean("serverup", false)) {
|
||||||
ChromaBot.getInstance().sendMessage("", new EmbedBuilder().withColor(Color.YELLOW)
|
ChromaBot.getInstance().sendMessage("", new EmbedBuilder().withColor(Color.YELLOW)
|
||||||
.withTitle("Server recovered from a crash - chat connected.").build());
|
.withTitle("Server recovered from a crash - chat connected.").build());
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package buttondevteam.discordplugin.commands;
|
||||||
|
|
||||||
|
import buttondevteam.discordplugin.DiscordConnectedPlayer;
|
||||||
|
import buttondevteam.discordplugin.DiscordPlayer;
|
||||||
|
import buttondevteam.discordplugin.listeners.MCChatListener;
|
||||||
|
import buttondevteam.lib.TBMCChannelConnectEvent;
|
||||||
|
import buttondevteam.lib.chat.Channel;
|
||||||
|
import buttondevteam.lib.player.TBMCPlayer;
|
||||||
|
import lombok.val;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import sx.blah.discord.handle.obj.IMessage;
|
||||||
|
import sx.blah.discord.handle.obj.Permissions;
|
||||||
|
import sx.blah.discord.util.PermissionUtils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public class ChannelconCommand extends DiscordCommandBase {
|
||||||
|
@Override
|
||||||
|
public String getCommandName() {
|
||||||
|
return "here";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean run(IMessage message, String args) {
|
||||||
|
if (args.length() == 0)
|
||||||
|
return false;
|
||||||
|
if (!PermissionUtils.hasPermissions(message.getChannel(), message.getAuthor(), Permissions.MANAGE_CHANNEL)) {
|
||||||
|
message.reply("you need to have manage permissions for this channel!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//TODO: What if they no longer have permission to view the channel
|
||||||
|
if (MCChatListener.hasCustomChat(message.getChannel())) { //TODO: Remove command
|
||||||
|
message.reply("this channel is already connected to a Minecraft channel.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
val chan = Channel.getChannels().stream().filter(ch -> ch.ID.equalsIgnoreCase(args) || (ch.IDs != null && Arrays.stream(ch.IDs).anyMatch(cid -> cid.equalsIgnoreCase(args)))).findAny();
|
||||||
|
if (!chan.isPresent()) { //TODO: Red embed that disappears over time (kinda like the highlight messages in OW)
|
||||||
|
message.reply("MC channel with ID '" + args + "' not found! The ID is the command for it without the /.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
val chp = DiscordPlayer.getUser(message.getAuthor().getStringID(), DiscordPlayer.class).getAs(TBMCPlayer.class);
|
||||||
|
if (chp == null) {
|
||||||
|
message.reply("you need to connect your Minecraft account. In #bot do @ChromaBot connect <MCname>");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
val ev = new TBMCChannelConnectEvent(new DiscordConnectedPlayer(message.getAuthor(), message.getChannel(), chp.getUUID(), Bukkit.getOfflinePlayer(chp.getUUID()).getName()), chan.get());
|
||||||
|
Bukkit.getPluginManager().callEvent(ev); //Using a fake player with no login/logout, should be fine for this event
|
||||||
|
if (ev.isCancelled() || ev.getGroupid() == null) {
|
||||||
|
message.reply("sorry, that didn't work. You cannot use that Minecraft channel.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
MCChatListener.addCustomChat(message.getChannel(), args, ev.getChannel());
|
||||||
|
message.reply("alright, connection made!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String[] getHelpText() {
|
||||||
|
return new String[]{ //
|
||||||
|
"§6---- Channel connect ---", //
|
||||||
|
"This command allows you to connect a Minecraft channel to a Discord channel (just like how the global chat is connected to #minecraft-chat).", //
|
||||||
|
"You need to have access to the MC channel and have manage permissions on the Discord channel.", //
|
||||||
|
"You also need to have your Minecraft account connected. In #bot use @ChromaBot connect <mcname>.", //
|
||||||
|
"Call this command from the channel you want to use. Usage: @ChromaBot channelcon <mcchannel>", //
|
||||||
|
"Invite link: https://discordapp.com/oauth2/authorize?client_id=226443037893591041&scope=bot" //
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
|
@ -25,15 +25,13 @@ public class ConnectCommand extends DiscordCommandBase {
|
||||||
public static HashBiMap<String, String> WaitingToConnect = HashBiMap.create();
|
public static HashBiMap<String, String> WaitingToConnect = HashBiMap.create();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(IMessage message, String args) {
|
public boolean run(IMessage message, String args) {
|
||||||
if (args.length() == 0) {
|
if (args.length() == 0)
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "Usage: connect <Minecraftname>");
|
return true;
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.contains(" ")) {
|
if (args.contains(" ")) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"Too many arguments.\nUsage: connect <Minecraftname>");
|
"Too many arguments.\nUsage: connect <Minecraftname>");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
if (WaitingToConnect.inverse().containsKey(message.getAuthor().getStringID())) {
|
if (WaitingToConnect.inverse().containsKey(message.getAuthor().getStringID())) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
|
@ -44,13 +42,13 @@ public class ConnectCommand extends DiscordCommandBase {
|
||||||
OfflinePlayer p = Bukkit.getOfflinePlayer(args);
|
OfflinePlayer p = Bukkit.getOfflinePlayer(args);
|
||||||
if (p == null) {
|
if (p == null) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "The specified Minecraft player cannot be found");
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), "The specified Minecraft player cannot be found");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
try (TBMCPlayer pl = TBMCPlayerBase.getPlayer(p.getUniqueId(), TBMCPlayer.class)) {
|
try (TBMCPlayer pl = TBMCPlayerBase.getPlayer(p.getUniqueId(), TBMCPlayer.class)) {
|
||||||
DiscordPlayer dp = pl.getAs(DiscordPlayer.class);
|
DiscordPlayer dp = pl.getAs(DiscordPlayer.class);
|
||||||
if (dp != null && message.getAuthor().getStringID().equals(dp.getDiscordID())) {
|
if (dp != null && message.getAuthor().getStringID().equals(dp.getDiscordID())) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "You already have this account connected.");
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), "You already have this account connected.");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
TBMCCoreAPI.SendException("An error occured while connecting a Discord account!", e);
|
TBMCCoreAPI.SendException("An error occured while connecting a Discord account!", e);
|
||||||
|
@ -63,6 +61,7 @@ public class ConnectCommand extends DiscordCommandBase {
|
||||||
if (p.isOnline())
|
if (p.isOnline())
|
||||||
((Player) p).sendMessage("§bTo connect with the Discord account " + message.getAuthor().getName() + "#"
|
((Player) p).sendMessage("§bTo connect with the Discord account " + message.getAuthor().getName() + "#"
|
||||||
+ message.getAuthor().getDiscriminator() + " do /discord accept");
|
+ message.getAuthor().getDiscriminator() + " do /discord accept");
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -4,23 +4,26 @@ import buttondevteam.discordplugin.DiscordPlugin;
|
||||||
import buttondevteam.lib.TBMCCoreAPI;
|
import buttondevteam.lib.TBMCCoreAPI;
|
||||||
import sx.blah.discord.handle.obj.IMessage;
|
import sx.blah.discord.handle.obj.IMessage;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public abstract class DiscordCommandBase {
|
public abstract class DiscordCommandBase {
|
||||||
public abstract String getCommandName();
|
public abstract String getCommandName();
|
||||||
|
|
||||||
public abstract void run(IMessage message, String args);
|
public abstract boolean run(IMessage message, String args);
|
||||||
|
|
||||||
public abstract String[] getHelpText();
|
public abstract String[] getHelpText();
|
||||||
|
|
||||||
static final HashMap<String, DiscordCommandBase> commands = new HashMap<String, DiscordCommandBase>();
|
static final HashMap<String, DiscordCommandBase> commands = new HashMap<String, DiscordCommandBase>();
|
||||||
|
|
||||||
static {
|
public static void registerCommands() {
|
||||||
commands.put("connect", new ConnectCommand()); // TODO: API for adding commands?
|
commands.put("connect", new ConnectCommand()); // TODO: API for adding commands?
|
||||||
commands.put("userinfo", new UserinfoCommand());
|
commands.put("userinfo", new UserinfoCommand());
|
||||||
commands.put("help", new HelpCommand());
|
commands.put("help", new HelpCommand());
|
||||||
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());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void runCommand(String cmd, String args, IMessage message) {
|
public static void runCommand(String cmd, String args, IMessage message) {
|
||||||
|
@ -33,11 +36,16 @@ public abstract class DiscordCommandBase {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
command.run(message, args);
|
if (!command.run(message, args))
|
||||||
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), Arrays.stream(command.getHelpText()).collect(Collectors.joining("\n")));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
TBMCCoreAPI.SendException("An error occured while executing command " + cmd + "!", e);
|
TBMCCoreAPI.SendException("An error occured while executing command " + cmd + "!", e);
|
||||||
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.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected String[] splitargs(String args) {
|
||||||
|
return args.split("\\s+");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ public class HelpCommand extends DiscordCommandBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(IMessage message, String args) {
|
public boolean run(IMessage message, String args) {
|
||||||
DiscordCommandBase argdc;
|
DiscordCommandBase argdc;
|
||||||
if (args.length() == 0)
|
if (args.length() == 0)
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
|
@ -24,6 +24,7 @@ public class HelpCommand extends DiscordCommandBase {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
(argdc = DiscordCommandBase.commands.get(args)) == null ? "Command not found: " + args
|
(argdc = DiscordCommandBase.commands.get(args)) == null ? "Command not found: " + args
|
||||||
: Arrays.stream(argdc.getHelpText()).collect(Collectors.joining("\n")));
|
: Arrays.stream(argdc.getHelpText()).collect(Collectors.joining("\n")));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
package buttondevteam.discordplugin.commands;
|
|
||||||
|
|
||||||
import buttondevteam.discordplugin.mccommands.ChannelconMCCommand;
|
|
||||||
import lombok.val;
|
|
||||||
import sx.blah.discord.handle.obj.IMessage;
|
|
||||||
|
|
||||||
public class HereCommand extends DiscordCommandBase {
|
|
||||||
@Override
|
|
||||||
public String getCommandName() {
|
|
||||||
return "here";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run(IMessage message, String args) {
|
|
||||||
val chgroup = ChannelconMCCommand.PendingConnections.get(message.getAuthor().getStringID());
|
|
||||||
if (chgroup == null) {
|
|
||||||
message.reply("no pending connection found! "); //TODO
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String[] getHelpText() {
|
|
||||||
return new String[0];
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -14,11 +14,11 @@ public class MCChatCommand extends DiscordCommandBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(IMessage message, String args) {
|
public boolean run(IMessage message, String args) {
|
||||||
if (!message.getChannel().isPrivate()) {
|
if (!message.getChannel().isPrivate()) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"This command can only be issued in a direct message with the bot.");
|
"This command can only be issued in a direct message with the bot.");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
try (final DiscordPlayer user = DiscordPlayer.getUser(message.getAuthor().getStringID(), DiscordPlayer.class)) {
|
try (final DiscordPlayer user = DiscordPlayer.getUser(message.getAuthor().getStringID(), DiscordPlayer.class)) {
|
||||||
boolean mcchat = !user.isMinecraftChatEnabled();
|
boolean mcchat = !user.isMinecraftChatEnabled();
|
||||||
|
@ -31,6 +31,7 @@ public class MCChatCommand extends DiscordCommandBase {
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
TBMCCoreAPI.SendException("Error while setting mcchat for user" + message.getAuthor().getName(), e);
|
TBMCCoreAPI.SendException("Error while setting mcchat for user" + message.getAuthor().getName(), e);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -17,17 +17,14 @@ public class RoleCommand extends DiscordCommandBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(IMessage message, String args) {
|
public boolean run(IMessage message, String args) {
|
||||||
final String usagemsg = "Subcommands: add, remove, list";
|
if (args.length() == 0)
|
||||||
if (args.length() == 0) {
|
return false;
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), usagemsg);
|
String[] argsa = splitargs(args);
|
||||||
return;
|
|
||||||
}
|
|
||||||
String[] argsa = args.split(" ");
|
|
||||||
if (argsa[0].equalsIgnoreCase("add")) {
|
if (argsa[0].equalsIgnoreCase("add")) {
|
||||||
final IRole role = checkAndGetRole(message, argsa, "This command adds a game role to your account.");
|
final IRole role = checkAndGetRole(message, argsa, "This command adds a game role to your account.");
|
||||||
if (role == null)
|
if (role == null)
|
||||||
return;
|
return true;
|
||||||
try {
|
try {
|
||||||
DPUtils.perform(() -> message.getAuthor().addRole(role));
|
DPUtils.perform(() -> message.getAuthor().addRole(role));
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "Added game role.");
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), "Added game role.");
|
||||||
|
@ -38,7 +35,7 @@ public class RoleCommand extends DiscordCommandBase {
|
||||||
} else if (argsa[0].equalsIgnoreCase("remove")) {
|
} else if (argsa[0].equalsIgnoreCase("remove")) {
|
||||||
final IRole role = checkAndGetRole(message, argsa, "This command removes a game role from your account.");
|
final IRole role = checkAndGetRole(message, argsa, "This command removes a game role from your account.");
|
||||||
if (role == null)
|
if (role == null)
|
||||||
return;
|
return true;
|
||||||
try {
|
try {
|
||||||
DPUtils.perform(() -> message.getAuthor().removeRole(role));
|
DPUtils.perform(() -> message.getAuthor().removeRole(role));
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "Removed game role.");
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), "Removed game role.");
|
||||||
|
@ -49,7 +46,8 @@ public class RoleCommand extends DiscordCommandBase {
|
||||||
} else if (argsa[0].equalsIgnoreCase("list")) {
|
} else if (argsa[0].equalsIgnoreCase("list")) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"List of game roles:\n" + DiscordPlugin.GameRoles.stream().sorted().collect(Collectors.joining("\n")));
|
"List of game roles:\n" + DiscordPlugin.GameRoles.stream().sorted().collect(Collectors.joining("\n")));
|
||||||
} else DiscordPlugin.sendMessageToChannel(message.getChannel(), usagemsg);
|
} else return false;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IRole checkAndGetRole(IMessage message, String[] argsa, String usage) {
|
private IRole checkAndGetRole(IMessage message, String[] argsa, String usage) {
|
||||||
|
@ -87,7 +85,7 @@ public class RoleCommand extends DiscordCommandBase {
|
||||||
return new String[] { //
|
return new String[] { //
|
||||||
"Add or remove game roles from yourself.", //
|
"Add or remove game roles from yourself.", //
|
||||||
"Usage: role add|remove <name> or role list", //
|
"Usage: role add|remove <name> or role list", //
|
||||||
"Mods can use role addrole <name> to add a role as a game role" };
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,12 +20,7 @@ public class UserinfoCommand extends DiscordCommandBase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run(IMessage message, String args) {
|
public boolean run(IMessage message, String args) {
|
||||||
if (args.contains(" ")) {
|
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
|
||||||
"Too many arguments.\nUsage: userinfo [username/nickname[#tag]/ping]\nExamples:\nuserinfo ChromaBot\nuserinfo ChromaBot#6338\nuserinfo @ChromaBot#6338");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
IUser target = null;
|
IUser target = null;
|
||||||
if (args.length() == 0)
|
if (args.length() == 0)
|
||||||
target = message.getAuthor();
|
target = message.getAuthor();
|
||||||
|
@ -40,7 +35,7 @@ public class UserinfoCommand extends DiscordCommandBase {
|
||||||
if (targets.size() == 0) {
|
if (targets.size() == 0) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"The user cannot be found (by name): " + args);
|
"The user cannot be found (by name): " + args);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
for (IUser ptarget : targets) {
|
for (IUser ptarget : targets) {
|
||||||
if (ptarget.getDiscriminator().equalsIgnoreCase(targettag[1])) {
|
if (ptarget.getDiscriminator().equalsIgnoreCase(targettag[1])) {
|
||||||
|
@ -52,19 +47,19 @@ public class UserinfoCommand extends DiscordCommandBase {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"The user cannot be found (by discriminator): " + args + "(Found " + targets.size()
|
"The user cannot be found (by discriminator): " + args + "(Found " + targets.size()
|
||||||
+ " users with the name.)");
|
+ " users with the name.)");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
final List<IUser> targets = getUsers(message, args);
|
final List<IUser> targets = getUsers(message, args);
|
||||||
if (targets.size() == 0) {
|
if (targets.size() == 0) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"The user cannot be found on Discord: " + args);
|
"The user cannot be found on Discord: " + args);
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
if (targets.size() > 1) {
|
if (targets.size() > 1) {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||||
"Multiple users found with that (nick)name. Please specify the whole tag, like ChromaBot#6338 or use a ping.");
|
"Multiple users found with that (nick)name. Please specify the whole tag, like ChromaBot#6338 or use a ping.");
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
target = targets.get(0);
|
target = targets.get(0);
|
||||||
}
|
}
|
||||||
|
@ -77,6 +72,7 @@ public class UserinfoCommand extends DiscordCommandBase {
|
||||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "An error occured while getting the user!");
|
DiscordPlugin.sendMessageToChannel(message.getChannel(), "An error occured while getting the user!");
|
||||||
TBMCCoreAPI.SendException("Error while getting info about " + target.getName() + "!", e);
|
TBMCCoreAPI.SendException("Error while getting info about " + target.getName() + "!", e);
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<IUser> getUsers(IMessage message, String args) {
|
private List<IUser> getUsers(IMessage message, String args) {
|
||||||
|
@ -94,7 +90,8 @@ public class UserinfoCommand extends DiscordCommandBase {
|
||||||
return new String[] { //
|
return new String[] { //
|
||||||
"---- User information ----", //
|
"---- User information ----", //
|
||||||
"Shows some information about users, from Discord, from Minecraft or from Reddit if they have these accounts connected.", //
|
"Shows some information about users, from Discord, from Minecraft or from Reddit if they have these accounts connected.", //
|
||||||
"Usage: userinfo <Discordname>" //
|
"If used without args, shows your info.", //
|
||||||
|
"Usage: userinfo [username/nickname[#tag]/ping]\nExamples:\nuserinfo ChromaBot\nuserinfo ChromaBot#6338\nuserinfo @ChromaBot#6338" //
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -182,7 +182,7 @@ public class CommandListener {
|
||||||
args = "";
|
args = "";
|
||||||
} else {
|
} else {
|
||||||
cmd = cmdwithargs.substring(0, index);
|
cmd = cmdwithargs.substring(0, index);
|
||||||
args = cmdwithargs.substring(index + 1);
|
args = cmdwithargs.substring(index + 1).trim(); //In case there are multiple spaces
|
||||||
}
|
}
|
||||||
DiscordCommandBase.runCommand(cmd.toLowerCase(), args, message);
|
DiscordCommandBase.runCommand(cmd.toLowerCase(), args, message);
|
||||||
message.getChannel().setTypingStatus(false);
|
message.getChannel().setTypingStatus(false);
|
||||||
|
|
|
@ -46,12 +46,6 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
private LinkedBlockingQueue<AbstractMap.SimpleEntry<TBMCChatEvent, Instant>> sendevents = new LinkedBlockingQueue<>();
|
private LinkedBlockingQueue<AbstractMap.SimpleEntry<TBMCChatEvent, Instant>> sendevents = new LinkedBlockingQueue<>();
|
||||||
private Runnable sendrunnable;
|
private Runnable sendrunnable;
|
||||||
|
|
||||||
public static void addCustomChat(IChannel channel, String groupid, Channel mcchannel) {
|
|
||||||
val lmd = new LastMsgData(channel, null, null);
|
|
||||||
lmd.mcchannel = mcchannel;
|
|
||||||
lastmsgCustom.put(groupid, lmd);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler // Minecraft
|
@EventHandler // Minecraft
|
||||||
public void onMCChat(TBMCChatEvent ev) {
|
public void onMCChat(TBMCChatEvent ev) {
|
||||||
if (ev.isCancelled())
|
if (ev.isCancelled())
|
||||||
|
@ -186,7 +180,7 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
/**
|
/**
|
||||||
* Used for town or nation chats or anything else
|
* Used for town or nation chats or anything else
|
||||||
*/
|
*/
|
||||||
private static HashMap<String, LastMsgData> lastmsgCustom = new HashMap<>();
|
private static HashMap<LastMsgData, String> lastmsgCustom = new HashMap<>();
|
||||||
|
|
||||||
public static boolean privateMCChat(IChannel channel, boolean start, IUser user, DiscordPlayer dp) {
|
public static boolean privateMCChat(IChannel channel, boolean start, IUser user, DiscordPlayer dp) {
|
||||||
TBMCPlayer mcp = dp.getAs(TBMCPlayer.class);
|
TBMCPlayer mcp = dp.getAs(TBMCPlayer.class);
|
||||||
|
@ -230,6 +224,20 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
||||||
.anyMatch(lmd -> ((IPrivateChannel) lmd.channel).getRecipient().getStringID().equals(did));
|
.anyMatch(lmd -> ((IPrivateChannel) lmd.channel).getRecipient().getStringID().equals(did));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void addCustomChat(IChannel channel, String groupid, Channel mcchannel) {
|
||||||
|
val lmd = new LastMsgData(channel, null, null);
|
||||||
|
lmd.mcchannel = mcchannel;
|
||||||
|
lastmsgCustom.put(lmd, groupid);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean hasCustomChat(IChannel channel) {
|
||||||
|
return lastmsgCustom.entrySet().stream().anyMatch(lmd -> lmd.getKey().channel.getLongID() == channel.getLongID());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean removeCustomChat(IChannel channel) {
|
||||||
|
return lastmsgCustom.entrySet().removeIf(lmd -> lmd.getKey().channel.getLongID() == channel.getLongID());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* May contain P<DiscordID> as key for public chat
|
* May contain P<DiscordID> as key for public chat
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,58 +0,0 @@
|
||||||
package buttondevteam.discordplugin.mccommands;
|
|
||||||
|
|
||||||
import buttondevteam.discordplugin.DiscordPlayer;
|
|
||||||
import buttondevteam.lib.TBMCChannelConnectEvent;
|
|
||||||
import buttondevteam.lib.chat.Channel;
|
|
||||||
import buttondevteam.lib.chat.CommandClass;
|
|
||||||
import buttondevteam.lib.player.TBMCPlayer;
|
|
||||||
import lombok.val;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.AbstractMap;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
|
|
||||||
@CommandClass(modOnly = false, path = "channelcon")
|
|
||||||
public class ChannelconMCCommand extends DiscordMCCommandBase {
|
|
||||||
@Override //TODO: Since we require connecting the accounts, it can be done entirely on Discord.
|
|
||||||
public boolean OnCommand(Player player, String alias, String[] args) {
|
|
||||||
if (args.length < 1)
|
|
||||||
return false;
|
|
||||||
val chan = Channel.getChannels().stream().filter(ch -> ch.ID.equalsIgnoreCase(args[0]) || (ch.IDs != null && Arrays.stream(ch.IDs).anyMatch(cid -> cid.equalsIgnoreCase(args[0])))).findAny();
|
|
||||||
if (!chan.isPresent()) {
|
|
||||||
player.sendMessage("§cChannel with ID '" + args[0] + "' not found! The ID is the command for it without the /.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
val dp = TBMCPlayer.getPlayer(player.getUniqueId(), TBMCPlayer.class).getAs(DiscordPlayer.class);
|
|
||||||
if (dp == null) {
|
|
||||||
player.sendMessage("§cYou need to connect your Discord account. In #bot do @ChromaBot connect " + player.getName());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
val ev = new TBMCChannelConnectEvent(player, chan.get());
|
|
||||||
Bukkit.getPluginManager().callEvent(ev);
|
|
||||||
if (ev.isCancelled() || ev.getGroupid() == null) {
|
|
||||||
player.sendMessage("§cSorry, that didn't work. You cannot use that channel.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
//MCChatListener.addCustomChat() - TODO: Call in Discord cmd
|
|
||||||
PendingConnections.put(dp.getDiscordID(), new AbstractMap.SimpleEntry<>(ev.getChannel(), ev.getGroupid()));
|
|
||||||
player.sendMessage("§bAlright! Now invite me to your server then show me the channel to use (@ChromaBot here).");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String[] GetHelpText(String s) {
|
|
||||||
return new String[]{//
|
|
||||||
"§6---- Channel connect ---", //
|
|
||||||
"This command allows you to connect a Minecraft channel to a Discord channel.", //
|
|
||||||
"You need to have access to the MC channel and have manage permissions on the Discord channel." //
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Key: Discord ID
|
|
||||||
* Value of value. Channel Group ID
|
|
||||||
*/
|
|
||||||
public static HashMap<String, AbstractMap.SimpleEntry<Channel, String>> PendingConnections = new HashMap<>();
|
|
||||||
}
|
|
Loading…
Reference in a new issue