Add first join message type for Discord (#5160)

Co-authored-by: Josh Roy <10731363+JRoy@users.noreply.github.com>

Add a new message type for when a player has joined for the first time.
This commit is contained in:
diademiemi 2022-12-24 15:59:00 +01:00 committed by GitHub
parent 582a357752
commit db10678095
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 54 additions and 10 deletions

View File

@ -54,6 +54,7 @@ public final class MessageType {
*/
public static final class DefaultTypes {
public final static MessageType JOIN = new MessageType("join", true);
public final static MessageType FIRST_JOIN = new MessageType("first-join", true);
public final static MessageType LEAVE = new MessageType("leave", true);
public final static MessageType CHAT = new MessageType("chat", true);
public final static MessageType DEATH = new MessageType("death", true);
@ -64,7 +65,7 @@ public final class MessageType {
public final static MessageType SERVER_STOP = new MessageType("server-stop", false);
public final static MessageType KICK = new MessageType("kick", false);
public final static MessageType MUTE = new MessageType("mute", false);
private final static MessageType[] VALUES = new MessageType[]{JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, ACTION, SERVER_START, SERVER_STOP, KICK, MUTE};
private final static MessageType[] VALUES = new MessageType[]{JOIN, FIRST_JOIN, LEAVE, CHAT, DEATH, AFK, ADVANCEMENT, ACTION, SERVER_START, SERVER_STOP, KICK, MUTE};
/**
* Gets an array of all the default {@link MessageType MessageTypes}.

View File

@ -255,6 +255,18 @@ public class DiscordSettings implements IConf {
"username", "displayname", "joinmessage", "online", "unique");
}
public MessageFormat getFirstJoinFormat(Player player) {
final String format = getFormatString("first-join");
final String filled;
if (plugin.isPAPI() && format != null) {
filled = me.clip.placeholderapi.PlaceholderAPI.setPlaceholders(player, format);
} else {
filled = format;
}
return generateMessageFormat(filled, ":arrow_right: :first_place: {displayname} has joined the server for the first time!", false,
"username", "displayname", "joinmessage", "online", "unique");
}
public MessageFormat getQuitFormat(Player player) {
final String format = getFormatString("quit");
final String filled;

View File

@ -99,14 +99,19 @@ public class BukkitListener implements Listener {
public void onJoin(AsyncUserDataLoadEvent event) {
// Delay join to let nickname load
if (!isSilentJoinQuit(event.getUser(), "join") && !isVanishHide(event.getUser())) {
sendJoinQuitMessage(event.getUser().getBase(), event.getJoinMessage(), true);
// Check if this is the first time the player has joined
if (!event.getUser().getBase().hasPlayedBefore()) {
sendJoinQuitMessage(event.getUser().getBase(), event.getJoinMessage(), MessageType.DefaultTypes.FIRST_JOIN);
} else {
sendJoinQuitMessage(event.getUser().getBase(), event.getJoinMessage(), MessageType.DefaultTypes.JOIN);
}
}
}
@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onQuit(PlayerQuitEvent event) {
if (!isSilentJoinQuit(event.getPlayer(), "quit") && !isVanishHide(event.getPlayer())) {
sendJoinQuitMessage(event.getPlayer(), event.getQuitMessage(), false);
sendJoinQuitMessage(event.getPlayer(), event.getQuitMessage(), MessageType.DefaultTypes.LEAVE);
}
}
@ -124,20 +129,35 @@ public class BukkitListener implements Listener {
return;
}
if (event.getValue()) {
sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " left the game", false);
sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " left the game", MessageType.DefaultTypes.LEAVE);
return;
}
sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " joined the game", true);
sendJoinQuitMessage(event.getAffected().getBase(), ChatColor.YELLOW + event.getAffected().getName() + " joined the game", MessageType.DefaultTypes.JOIN);
}
public void sendJoinQuitMessage(final Player player, final String message, boolean join) {
sendDiscordMessage(join ? MessageType.DefaultTypes.JOIN : MessageType.DefaultTypes.LEAVE,
MessageUtil.formatMessage(join ? jda.getSettings().getJoinFormat(player) : jda.getSettings().getQuitFormat(player),
public void sendJoinQuitMessage(final Player player, final String message, MessageType type) {
int userCount = jda.getPlugin().getEss().getUsers().getUserCount();
final MessageFormat format;
switch (type.getKey()) {
case "join":
format = jda.getSettings().getJoinFormat(player);
break;
case "first-join":
format = jda.getSettings().getFirstJoinFormat(player);
break;
default: // So that it will always be initialised. Other options shouldn't be possible.
format = jda.getSettings().getQuitFormat(player);
userCount = userCount - 1;
break;
}
sendDiscordMessage(type,
MessageUtil.formatMessage(format,
MessageUtil.sanitizeDiscordMarkdown(player.getName()),
MessageUtil.sanitizeDiscordMarkdown(player.getDisplayName()),
MessageUtil.sanitizeDiscordMarkdown(message),
jda.getPlugin().getEss().getOnlinePlayers().size() - (join ? 0 : 1),
jda.getPlugin().getEss().getUsers().getUserCount()),
jda.getPlugin().getEss().getOnlinePlayers().size(),
userCount),
player);
}

View File

@ -116,6 +116,8 @@ console:
message-types:
# Join messages sent when a player joins the Minecraft server.
join: primary
# Join messages sent when a player joins the Minecraft server for the first time. This type is sent instead of the join type.
first-join: primary
# Leave messages sent when a player leaves the Minecraft server.
leave: primary
# Chat messages sent when a player chats on the Minecraft server.
@ -307,6 +309,15 @@ messages:
# - {unique}: The amount of unique players to ever join the server
# ... PlaceholderAPI placeholders are also supported here too!
join: ":arrow_right: {displayname} has joined!"
# This is the message sent to Discord when a player joins the minecraft server for the first time.
# The following placeholders can be used here:
# - {username}: The name of the user joining
# - {displayname}: The display name of the user joining
# - {joinmessage}: The full default join message used in game
# - {online}: The amount of players online
# - {unique}: The amount of unique players to ever join the server
# ... PlaceholderAPI placeholders are also supported here too!
first-join: ":arrow_right: :first_place: {displayname} has joined the server for the first time!"
# This is the message sent to Discord when a player leaves the minecraft server.
# The following placeholders can be used here:
# - {username}: The name of the user leaving