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.awt.*;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -60,7 +59,6 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
plugin = this;
|
plugin = this;
|
||||||
lastannouncementtime = getConfig().getLong("lastannouncementtime");
|
lastannouncementtime = getConfig().getLong("lastannouncementtime");
|
||||||
lastseentime = getConfig().getLong("lastseentime");
|
lastseentime = getConfig().getLong("lastseentime");
|
||||||
GameRoles = (List<String>) getConfig().getList("gameroles", new ArrayList<String>());
|
|
||||||
ClientBuilder cb = new ClientBuilder();
|
ClientBuilder cb = new ClientBuilder();
|
||||||
cb.withToken(Files.readFirstLine(new File("TBMC", "Token.txt"), StandardCharsets.UTF_8));
|
cb.withToken(Files.readFirstLine(new File("TBMC", "Token.txt"), StandardCharsets.UTF_8));
|
||||||
dc = cb.login();
|
dc = cb.login();
|
||||||
|
@ -77,6 +75,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
public static IChannel genchannel;
|
public static IChannel genchannel;
|
||||||
public static IChannel chatchannel;
|
public static IChannel chatchannel;
|
||||||
public static IChannel botroomchannel;
|
public static IChannel botroomchannel;
|
||||||
|
public static IChannel modlogchannel;
|
||||||
/**
|
/**
|
||||||
* Don't send messages, just receive, the same channel is used when testing
|
* 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
|
officechannel = devServer.getChannelByID(219626707458457603L); // developers-office
|
||||||
updatechannel = devServer.getChannelByID(233724163519414272L); // server-updates
|
updatechannel = devServer.getChannelByID(233724163519414272L); // server-updates
|
||||||
devofficechannel = officechannel; // developers-office
|
devofficechannel = officechannel; // developers-office
|
||||||
|
modlogchannel = mainServer.getChannelByID(283840717275791360L); // modlog
|
||||||
dc.changePresence(StatusType.ONLINE, ActivityType.PLAYING, "Chromacraft");
|
dc.changePresence(StatusType.ONLINE, ActivityType.PLAYING, "Chromacraft");
|
||||||
} else {
|
} else {
|
||||||
botchannel = devServer.getChannelByID(239519012529111040L); // bot-room
|
botchannel = devServer.getChannelByID(239519012529111040L); // bot-room
|
||||||
|
@ -119,6 +119,7 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
officechannel = devServer.getChannelByID(219626707458457603L); // developers-office
|
officechannel = devServer.getChannelByID(219626707458457603L); // developers-office
|
||||||
updatechannel = botchannel;
|
updatechannel = botchannel;
|
||||||
devofficechannel = botchannel;// bot-room
|
devofficechannel = botchannel;// bot-room
|
||||||
|
modlogchannel = botchannel; // bot-room
|
||||||
dc.changePresence(StatusType.ONLINE, ActivityType.PLAYING, "testing");
|
dc.changePresence(StatusType.ONLINE, ActivityType.PLAYING, "testing");
|
||||||
}
|
}
|
||||||
if (botchannel == null || annchannel == null || genchannel == null || botroomchannel == null
|
if (botchannel == null || annchannel == null || genchannel == null || botroomchannel == null
|
||||||
|
@ -129,6 +130,8 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
task.cancel();
|
task.cancel();
|
||||||
if (!sent) {
|
if (!sent) {
|
||||||
new ChromaBot(this).updatePlayerList();
|
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)) {
|
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());
|
||||||
|
@ -211,7 +214,6 @@ public class DiscordPlugin extends JavaPlugin implements IListener<ReadyEvent> {
|
||||||
MCListener.callEventExcludingSome(new PlayerQuitEvent(entry.getValue(), ""));
|
MCListener.callEventExcludingSome(new PlayerQuitEvent(entry.getValue(), ""));
|
||||||
getConfig().set("lastannouncementtime", lastannouncementtime);
|
getConfig().set("lastannouncementtime", lastannouncementtime);
|
||||||
getConfig().set("lastseentime", lastseentime);
|
getConfig().set("lastseentime", lastseentime);
|
||||||
getConfig().set("gameroles", GameRoles);
|
|
||||||
getConfig().set("serverup", false);
|
getConfig().set("serverup", false);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
MCChatListener.forAllMCChat(ch -> DiscordPlugin.sendMessageToChannelWait(ch, "",
|
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.IMessage;
|
||||||
import sx.blah.discord.handle.obj.IRole;
|
import sx.blah.discord.handle.obj.IRole;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@ -50,33 +49,7 @@ 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().collect(Collectors.joining("\n")));
|
"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")) {
|
} else DiscordPlugin.sendMessageToChannel(message.getChannel(), usagemsg);
|
||||||
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.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private IRole checkAndGetRole(IMessage message, String[] argsa, String usage) {
|
private IRole checkAndGetRole(IMessage message, String[] argsa, String usage) {
|
||||||
|
|
|
@ -5,9 +5,13 @@ import buttondevteam.discordplugin.DiscordPlugin;
|
||||||
import buttondevteam.discordplugin.commands.DiscordCommandBase;
|
import buttondevteam.discordplugin.commands.DiscordCommandBase;
|
||||||
import buttondevteam.lib.TBMCCoreAPI;
|
import buttondevteam.lib.TBMCCoreAPI;
|
||||||
import lombok.val;
|
import lombok.val;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import sx.blah.discord.api.events.IListener;
|
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.MentionEvent;
|
||||||
import sx.blah.discord.handle.impl.events.guild.channel.message.MessageReceivedEvent;
|
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.impl.events.user.PresenceUpdateEvent;
|
||||||
import sx.blah.discord.handle.obj.IChannel;
|
import sx.blah.discord.handle.obj.IChannel;
|
||||||
import sx.blah.discord.handle.obj.IMessage;
|
import sx.blah.discord.handle.obj.IMessage;
|
||||||
|
@ -121,7 +125,21 @@ public class CommandListener {
|
||||||
lasttime = TimeUnit.NANOSECONDS.toHours(System.nanoTime());
|
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())
|
if (!event.getMessage().isDeleted() && !event.getChannel().isPrivate())
|
||||||
event.getMessage().delete();
|
event.getMessage().delete();
|
||||||
});
|
});
|
||||||
|
preprocessChat(dsender, dmessage);
|
||||||
final String cmd = dmessage.substring(1).toLowerCase();
|
final String cmd = dmessage.substring(1).toLowerCase();
|
||||||
if (dsender instanceof DiscordSender && Arrays.stream(UnconnectedCmds)
|
if (dsender instanceof DiscordSender && Arrays.stream(UnconnectedCmds)
|
||||||
.noneMatch(s -> cmd.equals(s) || cmd.startsWith(s + " "))) {
|
.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.
|
* 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