Channel cmds, game role detection
- Add channel handling - Add autodetect of game roles -- Announces adding/removing/changing them --- TODO
This commit is contained in:
parent
155311b019
commit
20b9d6947b
4 changed files with 64 additions and 34 deletions
|
@ -30,7 +30,6 @@ import sx.blah.discord.util.RequestBuffer;
|
|||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
@ -60,7 +59,6 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
plugin = this;
|
||||
lastannouncementtime = getConfig().getLong("lastannouncementtime");
|
||||
lastseentime = getConfig().getLong("lastseentime");
|
||||
GameRoles = (List<String>) getConfig().getList("gameroles", new ArrayList<String>());
|
||||
ClientBuilder cb = new ClientBuilder();
|
||||
cb.withToken(Files.readFirstLine(new File("TBMC", "Token.txt"), StandardCharsets.UTF_8));
|
||||
dc = cb.login();
|
||||
|
@ -77,6 +75,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
public static IChannel genchannel;
|
||||
public static IChannel chatchannel;
|
||||
public static IChannel botroomchannel;
|
||||
public static IChannel modlogchannel;
|
||||
/**
|
||||
* Don't send messages, just receive, the same channel is used when testing
|
||||
*/
|
||||
|
@ -109,6 +108,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
officechannel = devServer.getChannelByID(219626707458457603L); // developers-office
|
||||
updatechannel = devServer.getChannelByID(233724163519414272L); // server-updates
|
||||
devofficechannel = officechannel; // developers-office
|
||||
modlogchannel = mainServer.getChannelByID(283840717275791360L); // modlog
|
||||
dc.changePresence(StatusType.ONLINE, ActivityType.PLAYING, "Chromacraft");
|
||||
} else {
|
||||
botchannel = devServer.getChannelByID(239519012529111040L); // bot-room
|
||||
|
@ -119,6 +119,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
officechannel = devServer.getChannelByID(219626707458457603L); // developers-office
|
||||
updatechannel = botchannel;
|
||||
devofficechannel = botchannel;// bot-room
|
||||
modlogchannel = botchannel; // bot-room
|
||||
dc.changePresence(StatusType.ONLINE, ActivityType.PLAYING, "testing");
|
||||
}
|
||||
if (botchannel == null || annchannel == null || genchannel == null || botroomchannel == null
|
||||
|
@ -129,6 +130,8 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
task.cancel();
|
||||
if (!sent) {
|
||||
new ChromaBot(this).updatePlayerList();
|
||||
//Get all roles with the default color
|
||||
GameRoles = mainServer.getRoles().stream().filter(r -> r.getColor().getAlpha() == 0).map(IRole::getName).collect(Collectors.toList());
|
||||
if (getConfig().getBoolean("serverup", false)) {
|
||||
ChromaBot.getInstance().sendMessage("", new EmbedBuilder().withColor(Color.YELLOW)
|
||||
.withTitle("Server recovered from a crash - chat connected.").build());
|
||||
|
@ -211,7 +214,6 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
|||
MCListener.callEventExcludingSome(new PlayerQuitEvent(entry.getValue(), ""));
|
||||
getConfig().set("lastannouncementtime", lastannouncementtime);
|
||||
getConfig().set("lastseentime", lastseentime);
|
||||
getConfig().set("gameroles", GameRoles);
|
||||
getConfig().set("serverup", false);
|
||||
saveConfig();
|
||||
MCChatListener.forAllMCChat(ch -> DiscordPlugin.sendMessageToChannelWait(ch, "",
|
||||
|
|
|
@ -6,7 +6,6 @@ import buttondevteam.lib.TBMCCoreAPI;
|
|||
import sx.blah.discord.handle.obj.IMessage;
|
||||
import sx.blah.discord.handle.obj.IRole;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
@ -50,33 +49,7 @@ public class RoleCommand extends DiscordCommandBase {
|
|||
} else if (argsa[0].equalsIgnoreCase("list")) {
|
||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||
"List of game roles:\n" + DiscordPlugin.GameRoles.stream().collect(Collectors.joining("\n")));
|
||||
} else if (argsa[0].equalsIgnoreCase("admin") && argsa.length > 1 && argsa[1].equalsIgnoreCase("addrole")) {
|
||||
if (message.getAuthor().getRolesForGuild(DiscordPlugin.mainServer).stream()
|
||||
.noneMatch(r -> r.getLongID() == 126030201472811008L)) {
|
||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||
"You need to be a moderator to use this command.");
|
||||
return;
|
||||
}
|
||||
if (argsa.length < 3) {
|
||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||
"Add a role to the game role list.\nUsage: " + argsa[0] + " <rolename>");
|
||||
return;
|
||||
}
|
||||
String rolename = Arrays.stream(argsa).skip(2).collect(Collectors.joining(" "));
|
||||
final List<IRole> roles = (TBMCCoreAPI.IsTestServer() ? DiscordPlugin.devServer : DiscordPlugin.mainServer)
|
||||
.getRolesByName(rolename);
|
||||
if (roles.size() == 0) {
|
||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "That role cannot be found on Discord.");
|
||||
return;
|
||||
}
|
||||
if (roles.size() > 1) {
|
||||
DiscordPlugin.sendMessageToChannel(message.getChannel(),
|
||||
"There are more roles with this name. Why are there more roles with this name?");
|
||||
return;
|
||||
}
|
||||
DiscordPlugin.GameRoles.add(roles.get(0).getName());
|
||||
DiscordPlugin.sendMessageToChannel(message.getChannel(), "Game role added.");
|
||||
}
|
||||
} else DiscordPlugin.sendMessageToChannel(message.getChannel(), usagemsg);
|
||||
}
|
||||
|
||||
private IRole checkAndGetRole(IMessage message, String[] argsa, String usage) {
|
||||
|
|
|
@ -5,9 +5,13 @@ import buttondevteam.discordplugin.DiscordPlugin;
|
|||
import buttondevteam.discordplugin.commands.DiscordCommandBase;
|
||||
import buttondevteam.lib.TBMCCoreAPI;
|
||||
import lombok.val;
|
||||
import org.bukkit.Bukkit;
|
||||
import sx.blah.discord.api.events.IListener;
|
||||
import sx.blah.discord.handle.impl.events.guild.channel.message.MentionEvent;
|
||||
import sx.blah.discord.handle.impl.events.guild.channel.message.MessageReceivedEvent;
|
||||
import sx.blah.discord.handle.impl.events.guild.role.RoleCreateEvent;
|
||||
import sx.blah.discord.handle.impl.events.guild.role.RoleDeleteEvent;
|
||||
import sx.blah.discord.handle.impl.events.guild.role.RoleUpdateEvent;
|
||||
import sx.blah.discord.handle.impl.events.user.PresenceUpdateEvent;
|
||||
import sx.blah.discord.handle.obj.IChannel;
|
||||
import sx.blah.discord.handle.obj.IMessage;
|
||||
|
@ -121,7 +125,21 @@ public class CommandListener {
|
|||
lasttime = TimeUnit.NANOSECONDS.toHours(System.nanoTime());
|
||||
}
|
||||
}
|
||||
} };
|
||||
}, (IListener<RoleCreateEvent>) event -> {
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(DiscordPlugin.plugin, () -> {
|
||||
if (event.getRole().isDeleted() || event.getRole().getColor().getAlpha() != 0)
|
||||
return; //Deleted or not a game role
|
||||
DiscordPlugin.GameRoles.add(event.getRole().getName());
|
||||
DiscordPlugin.sendMessageToChannel(DiscordPlugin.modlogchannel, "Added " + event.getRole().getName() + " as game role. If you don't want this, change the role's color from the default.");
|
||||
}, 100);
|
||||
}, (IListener<RoleDeleteEvent>) event -> {
|
||||
if (DiscordPlugin.GameRoles.remove(event.getRole().getName()))
|
||||
DiscordPlugin.sendMessageToChannel(DiscordPlugin.modlogchannel, "Removed " + event.getRole().getName() + " as a game role.");
|
||||
}, (IListener<RoleUpdateEvent>) event -> {
|
||||
if (event.getNewRole().getColor().getAlpha() != 0 && DiscordPlugin.GameRoles.remove(event.getOldRole().getName()))
|
||||
DiscordPlugin.sendMessageToChannel(DiscordPlugin.modlogchannel, "Removed " + event.getOldRole().getName() + " as a game role because it's color changed.");
|
||||
//else if() - TODO
|
||||
}};
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -336,6 +336,7 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
|||
if (!event.getMessage().isDeleted() && !event.getChannel().isPrivate())
|
||||
event.getMessage().delete();
|
||||
});
|
||||
preprocessChat(dsender, dmessage);
|
||||
final String cmd = dmessage.substring(1).toLowerCase();
|
||||
if (dsender instanceof DiscordSender && Arrays.stream(UnconnectedCmds)
|
||||
.noneMatch(s -> cmd.equals(s) || cmd.startsWith(s + " "))) {
|
||||
|
@ -426,6 +427,42 @@ public class MCChatListener implements Listener, IListener<MessageReceivedEvent>
|
|||
}
|
||||
}
|
||||
|
||||
private boolean preprocessChat(DiscordSenderBase dsender, String dmessage) {
|
||||
if (dmessage.length() < 2)
|
||||
return false;
|
||||
int index = dmessage.indexOf(" ");
|
||||
String cmd;
|
||||
if (index == -1) { // Only the command is run
|
||||
cmd = dmessage;
|
||||
for (Channel channel : Channel.getChannels()) {
|
||||
if (cmd.equalsIgnoreCase(channel.ID) || (channel.IDs != null && Arrays.stream(channel.IDs).anyMatch(cmd::equalsIgnoreCase))) {
|
||||
Channel oldch = dsender.getMcchannel();
|
||||
if (oldch instanceof ChatRoom)
|
||||
((ChatRoom) oldch).leaveRoom(dsender);
|
||||
if (oldch.equals(channel))
|
||||
dsender.setMcchannel(Channel.GlobalChat);
|
||||
else {
|
||||
dsender.setMcchannel(channel);
|
||||
if (channel instanceof ChatRoom)
|
||||
((ChatRoom) channel).joinRoom(dsender);
|
||||
}
|
||||
dsender.sendMessage("You are now talking in: " + dsender.getMcchannel().DisplayName);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else { // We have arguments
|
||||
cmd = dmessage.substring(0, index);
|
||||
for (Channel channel : Channel.getChannels()) {
|
||||
if (cmd.equalsIgnoreCase(channel.ID) || (channel.IDs != null && Arrays.stream(channel.IDs).anyMatch(cmd::equalsIgnoreCase))) {
|
||||
TBMCChatAPI.SendChatMessage(channel, dsender, dmessage.substring(index + 1));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
// TODO: Target selectors
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* This method will find the best sender to use: if the player is online, use that, if not but connected then use that etc.
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue