From 17887707cbd8c71151f3dd0722cf12b8c1ab1199 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Thu, 1 Nov 2018 01:34:36 +0100 Subject: [PATCH] Bunch of channel stuff #70 is technically fixed but there's another issue #61 and #71 are definitely fixed Allowing multiple channels to be connected --- pom.xml | 7 +++ .../discordplugin/ChannelconBroadcast.java | 2 +- .../discordplugin/DiscordPlugin.java | 8 ++- .../discordplugin/DiscordSender.java | 4 +- .../commands/ChannelconCommand.java | 10 ++-- .../listeners/MCChatListener.java | 55 +++++++++++-------- .../discordplugin/listeners/MCListener.java | 3 +- 7 files changed, 55 insertions(+), 34 deletions(-) diff --git a/pom.xml b/pom.xml index 5c69674..f283fc7 100755 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,13 @@ testDelombok false src/test/java --> + + maven-surefire-plugin + + false + + + diff --git a/src/main/java/buttondevteam/discordplugin/ChannelconBroadcast.java b/src/main/java/buttondevteam/discordplugin/ChannelconBroadcast.java index e5187e2..994c8ed 100644 --- a/src/main/java/buttondevteam/discordplugin/ChannelconBroadcast.java +++ b/src/main/java/buttondevteam/discordplugin/ChannelconBroadcast.java @@ -3,7 +3,7 @@ package buttondevteam.discordplugin; public enum ChannelconBroadcast { JOINLEAVE, AFK, - RESTART, //TODO + RESTART, DEATH, BROADCAST; diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 02b9f12..be7e8a9 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -221,8 +221,12 @@ public class DiscordPlugin extends JavaPlugin implements IListener { TBMCCoreAPI.RegisterEventsForExceptions(new MCListener(), this); TBMCChatAPI.AddCommands(this, DiscordMCCommandBase.class); TBMCCoreAPI.RegisterUserClass(DiscordPlayer.class); - ChromaGamerBase.addConverter(sender -> Optional.ofNullable(sender instanceof DiscordSenderBase - ? ((DiscordSenderBase) sender).getChromaUser() : null)); + ChromaGamerBase.addConverter(sender -> { + //System.out.println("Discord converter queried: "+sender+" "+sender.getName()); - TODO: Remove + //System.out.println(((DiscordSenderBase) sender).getChromaUser().channel().get().ID); //TODO: TMP + return Optional.ofNullable(sender instanceof DiscordSenderBase + ? ((DiscordSenderBase) sender).getChromaUser() : null); + }); new Thread(this::AnnouncementGetterThreadMethod).start(); setupProviders(); } catch (Exception e) { diff --git a/src/main/java/buttondevteam/discordplugin/DiscordSender.java b/src/main/java/buttondevteam/discordplugin/DiscordSender.java index 5cd4df6..8ad7445 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordSender.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordSender.java @@ -86,12 +86,12 @@ public class DiscordSender extends DiscordSenderBase implements CommandSender { } @Override - public boolean isOp() { // TODO: Connect with TBMC acc + public boolean isOp() { return false; } @Override - public void setOp(boolean value) { // TODO: Connect with TBMC acc + public void setOp(boolean value) { } @Override diff --git a/src/main/java/buttondevteam/discordplugin/commands/ChannelconCommand.java b/src/main/java/buttondevteam/discordplugin/commands/ChannelconCommand.java index ec2a04b..73eefd1 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/ChannelconCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/ChannelconCommand.java @@ -4,7 +4,6 @@ import buttondevteam.discordplugin.ChannelconBroadcast; import buttondevteam.discordplugin.DiscordConnectedPlayer; import buttondevteam.discordplugin.DiscordPlayer; import buttondevteam.discordplugin.listeners.MCChatListener; -import buttondevteam.lib.TBMCChannelConnectFakeEvent; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.player.TBMCPlayer; import lombok.val; @@ -79,18 +78,17 @@ public class ChannelconCommand extends DiscordCommandBase { return true; } DiscordConnectedPlayer dcp = new DiscordConnectedPlayer(message.getAuthor(), message.getChannel(), chp.getUUID(), Bukkit.getOfflinePlayer(chp.getUUID()).getName()); - val ev = new TBMCChannelConnectFakeEvent(dcp, chan.get()); //Using a fake player with no login/logout, should be fine for this event - String groupid = ev.getGroupID(ev.getSender()); //We're not trying to send in a specific group, we want to know which group the user belongs to (so not getGroupID()) + String groupid = chan.get().getGroupID(dcp); if (groupid == null) { message.reply("sorry, that didn't work. You cannot use that Minecraft channel."); return true; } - if (MCChatListener.getCustomChats().stream().anyMatch(cc -> cc.groupID.equals(groupid) && cc.mcchannel.ID.equals(chan.get().ID))) { + /*if (MCChatListener.getCustomChats().stream().anyMatch(cc -> cc.groupID.equals(groupid) && cc.mcchannel.ID.equals(chan.get().ID))) { message.reply("sorry, this MC chat is already connected to a different channel, multiple channels are not supported atm."); return true; - } - MCChatListener.addCustomChat(message.getChannel(), groupid, ev.getChannel(), message.getAuthor(), dcp, 0); + }*/ //TODO: "Channel admins" that can connect channels? + MCChatListener.addCustomChat(message.getChannel(), groupid, chan.get(), message.getAuthor(), dcp, 0); message.reply("alright, connection made to group `" + groupid + "`!"); return true; } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 6db4a81..4d73c83 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -2,7 +2,10 @@ package buttondevteam.discordplugin.listeners; import buttondevteam.discordplugin.*; import buttondevteam.discordplugin.playerfaker.VanillaCommandListener; -import buttondevteam.lib.*; +import buttondevteam.lib.TBMCChatEvent; +import buttondevteam.lib.TBMCChatPreprocessEvent; +import buttondevteam.lib.TBMCCoreAPI; +import buttondevteam.lib.TBMCSystemChatEvent; import buttondevteam.lib.chat.Channel; import buttondevteam.lib.chat.ChatMessage; import buttondevteam.lib.chat.ChatRoom; @@ -125,7 +128,7 @@ public class MCChatListener implements Listener, IListener Predicate isdifferentchannel = ch -> !(e.getSender() instanceof DiscordSenderBase) || ((DiscordSenderBase) e.getSender()).getChannel().getLongID() != ch.getLongID(); - if ((e.getChannel() == Channel.GlobalChat || e.getChannel().ID.equals("rp")) + if (e.getChannel().isGlobal() && (e.isFromcmd() || isdifferentchannel.test(DiscordPlugin.chatchannel))) doit.accept(lastmsgdata == null ? lastmsgdata = new LastMsgData(DiscordPlugin.chatchannel, null) @@ -304,9 +307,10 @@ public class MCChatListener implements Listener, IListener return lastmsgCustom.stream().anyMatch(lmd -> lmd.channel.getLongID() == channel.getLongID()); } - public static CustomLMD getCustomChat(IChannel channel) { - return lastmsgCustom.stream().filter(lmd -> lmd.channel.getLongID() == channel.getLongID()).findAny().orElse(null); - } + @Nullable + public static CustomLMD getCustomChat(IChannel channel) { + return lastmsgCustom.stream().filter(lmd -> lmd.channel.getLongID() == channel.getLongID()).findAny().orElse(null); + } public static boolean removeCustomChat(IChannel channel) { lastmsgfromd.remove(channel.getLongID()); @@ -387,9 +391,8 @@ public class MCChatListener implements Listener, IListener return false; //If null then allow if (sender == null) return true; - val e = new TBMCChannelConnectFakeEvent(sender, clmd.mcchannel); - return clmd.groupID.equals(e.getGroupID(sender)); - }).forEach(cc -> action.accept(cc.channel)); //TODO: Use getScore and getGroupID in fake event constructor - This should also send error messages on channel connect + return clmd.groupID.equals(clmd.mcchannel.getGroupID(sender)); + }).forEach(cc -> action.accept(cc.channel)); //TODO: Send error messages on channel connect } /** @@ -403,7 +406,7 @@ public class MCChatListener implements Listener, IListener public static void forAllowedCustomAndAllMCChat(Consumer action, @Nullable CommandSender sender, @Nullable ChannelconBroadcast toggle, boolean hookmsg) { if (!DiscordPlugin.hooked || !hookmsg) forAllMCChat(action); - forAllowedCustomMCChat(action, sender, toggle); //TODO: Use getScore and getGroupID in fake event constructor - This should also send error messages on channel connect + forAllowedCustomMCChat(action, sender, toggle); } public static Consumer send(String message) { @@ -411,7 +414,7 @@ public class MCChatListener implements Listener, IListener } public static void forAllowedMCChat(Consumer action, TBMCSystemChatEvent event) { - if (Channel.GlobalChat.ID.equals(event.getChannel().ID)) + if (event.getChannel().isGlobal()) action.accept(DiscordPlugin.chatchannel); for (LastMsgData data : lastmsgPerUser) if (event.shouldSendTo(getSender(data.channel, data.user))) @@ -562,23 +565,29 @@ public class MCChatListener implements Listener, IListener .filter(c -> c.ID.equalsIgnoreCase(topcmd) || (c.IDs != null && c.IDs.length > 0 && Arrays.stream(c.IDs).anyMatch(id -> id.equalsIgnoreCase(topcmd)))).findAny(); - if (!ch.isPresent()) - Bukkit.getScheduler().runTask(DiscordPlugin.plugin, - () -> { - val channel = dsender.getChromaUser().channel(); //TODO: Save? + if (!ch.isPresent()) //TODO: What if talking in the public chat while we have it on a different one + Bukkit.getScheduler().runTask(DiscordPlugin.plugin, //Commands need to be run sync + () -> { //TODO: Better handling... + val channel = user.channel(); val chtmp = channel.get(); - if (clmd != null) - channel.set(clmd.mcchannel); //Hack to send command in the channel + //System.out.println("1: "+chtmp.ID); + //System.out.println("clmd: "+clmd); + if (clmd != null) { + channel.set(clmd.mcchannel); //Hack to send command in the channel + //System.out.println("clmd chan: "+clmd.mcchannel.ID); + } //TODO: Permcheck isn't implemented for commands + //System.out.println("2: "+channel.get().ID); VanillaCommandListener.runBukkitOrVanillaCommand(dsender, cmd); Bukkit.getLogger().info(dsender.getName() + " issued command from Discord: /" + cmdlowercased); if (clmd != null) channel.set(chtmp); + //System.out.println("3: "+channel.get().ID); - TODO: Remove }); else { Channel chc = ch.get(); - if (!chc.ID.equals(Channel.GlobalChat.ID) && !chc.ID.equals("rp") && !event.getMessage().getChannel().isPrivate()) + if (!chc.isGlobal() && !event.getMessage().getChannel().isPrivate()) dsender.sendMessage( - "You can only talk in global in the public chat. DM `mcchat` to enable private chat to talk in the other channels."); + "You can only talk in a public chat here. DM `mcchat` to enable private chat to talk in the other channels."); else { if (spi == -1) // Switch channels { @@ -609,10 +618,12 @@ public class MCChatListener implements Listener, IListener lastlistp = (short) Bukkit.getOnlinePlayers().size(); } else {// Not a command if (dmessage.length() == 0 && event.getMessage().getAttachments().size() == 0 - && !event.getChannel().isPrivate() && event.getMessage().isSystemMessage()) - TBMCChatAPI.SendSystemMessage(Channel.GlobalChat, 0, "everyone", - (dsender instanceof Player ? ((Player) dsender).getDisplayName() - : dsender.getName()) + " pinned a message on Discord."); + && !event.getChannel().isPrivate() && event.getMessage().isSystemMessage()) { + val rtr = clmd != null ? clmd.mcchannel.filteranderrormsg.apply(clmd.dcp) : dsender.getChromaUser().channel().get().filteranderrormsg.apply(dsender); + TBMCChatAPI.SendSystemMessage(clmd != null ? clmd.mcchannel : dsender.getChromaUser().channel().get(), rtr.score, rtr.groupID, + (dsender instanceof Player ? ((Player) dsender).getDisplayName() + : dsender.getName()) + " pinned a message on Discord."); + } else { val cmb = ChatMessage.builder(dsender, user, getChatMessage.apply(dmessage)).fromCommand(false); if (clmd != null) diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index e7d57ec..6f9b3c9 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -137,7 +137,7 @@ public class MCListener implements Listener { return; final IUser user = DiscordPlugin.dc.getUserByID( Long.parseLong(TBMCPlayerBase.getPlayer(source.getPlayer().getUniqueId(), TBMCPlayer.class) - .getAs(DiscordPlayer.class).getDiscordID())); // TODO: Use long + .getAs(DiscordPlayer.class).getDiscordID())); if (e.getValue()) user.addRole(role); else @@ -163,6 +163,7 @@ public class MCListener implements Listener { public void onYEEHAW(TBMCYEEHAWEvent event) { //TODO: Inherit from the chat event base to have channel support String name = event.getSender() instanceof Player ? ((Player) event.getSender()).getDisplayName() : event.getSender().getName(); + //Channel channel = ChromaGamerBase.getFromSender(event.getSender()).channel().get(); - TODO MCChatListener.forAllMCChat(MCChatListener.send(name + " <:YEEHAW:" + DiscordPlugin.mainServer.getEmojiByName("YEEHAW").getStringID() + ">s")); }