Add Discord command and logo embed
Build Plugin / build-and-release (push) Successful in 4m6s

This commit is contained in:
asminme committed 2026-10-08 10:03:48 +02:00
1 parent 895a33dc2f
commit 87f6c8ab1a
4 files changed
+24 -9

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
# AsminDiscordBridge
Prosty plugin do Minecrafta, który pokazuje na Discordzie, czy serwer jest online oraz kto aktualnie gra. Lista graczy jest sortowana według rangi z LuckPerms. Wiadomość odświeża się co 180 sekund, a jej ID plugin zapamiętuje w `memory.yml`, żeby po restarcie edytować tę samą wiadomość.
Prosty plugin do Minecrafta, który pokazuje na Discordzie, czy serwer jest online oraz kto aktualnie gra. Lista graczy jest sortowana według rangi z LuckPerms. Wiadomość zawiera logo serwera i odświeża się co 180 sekund, a jej ID plugin zapamiętuje w `memory.yml`, żeby po restarcie edytować tę samą wiadomość. Komenda `/discord` pokazuje klikalny link do Discorda.
Plugin jest napisany pod moje własne potrzeby. Kod jest „taki sobie” i nie wiem, czy będzie stabilny — **nie odpowiadam za jego działanie**. Jeśli chcesz go użyć albo poeksperymentować, zapraszam. Chętnie przyjmę feedback w Pull Requeście albo na adresie [hello@asmin.me](mailto:hello@asmin.me).
@@ -8,6 +8,8 @@ import net.dv8tion.jda.api.entities.channel.concrete.TextChannel;
import net.dv8tion.jda.api.events.session.ReadyEvent;
import net.dv8tion.jda.api.hooks.ListenerAdapter;
import net.dv8tion.jda.api.requests.GatewayIntent;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.event.ClickEvent;
import net.luckperms.api.LuckPerms;
import net.luckperms.api.LuckPermsProvider;
import net.luckperms.api.model.user.User;
@@ -21,6 +23,7 @@ import org.bukkit.scheduler.BukkitTask;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.Comparator;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
@@ -40,8 +43,21 @@ public final class AsminDiscordBridge extends JavaPlugin {
@Override
public void onEnable() {
saveDefaultConfig();
getConfig().addDefault("discord.invite-link", "https://classicmc.top/discord/");
getConfig().addDefault("server.title-img", "https://asmin.me/cdn/classicmc/logo-horizontal.webp");
getConfig().options().copyDefaults(true);
saveConfig();
loadMemory();
getCommand("discord").setExecutor((sender, command, label, args) -> {
String inviteLink = getConfig().getString("discord.invite-link", "https://classicmc.top/discord/");
Component message = Component.text("Discord: ")
.append(Component.text(inviteLink).clickEvent(ClickEvent.openUrl(inviteLink)));
sender.sendMessage(message);
return true;
});
getCommand("discord").setTabCompleter((sender, command, alias, args) -> Collections.emptyList());
String token = getConfig().getString("discord.token", "").trim();
String configuredChannel = getConfig().getString("discord.channel-id", "").trim();
if (token.isEmpty() || token.equals("WSTAW_TOKEN_BOTA") || !configuredChannel.matches("\\d+")) {
@@ -145,7 +161,6 @@ public final class AsminDiscordBridge extends JavaPlugin {
}
private MessageEmbed createEmbed(boolean online) {
String brand = getConfig().getString("server.brand", "ClassicMC.top");
String status = online ? "🟢 ONLINE" : "🔴 OFFLINE";
StringBuilder players = new StringBuilder();
@@ -169,12 +184,11 @@ public final class AsminDiscordBridge extends JavaPlugin {
EmbedBuilder embed = new EmbedBuilder()
.setColor(new Color(embedColor))
.setTitle(brand)
.setImage(getConfig().getString("server.title-img", "https://asmin.me/cdn/classicmc/logo-horizontal.webp"))
.addField("Status Serwera", status, false)
.addField("Aktywni gracze / Online Players (" + (online ? getServer().getOnlinePlayers().size() : 0) + ")",
players.toString(), false)
.setFooter("AsminDiscordBridge • odświeżanie co "
+ Math.max(30L, getConfig().getLong("server.refresh-seconds", 180L)) + " s");
.setFooter("AsminDiscordBridge");
return embed.build();
}
@@ -200,7 +214,6 @@ public final class AsminDiscordBridge extends JavaPlugin {
String translated = ChatColor.translateAlternateColorCodes('&', prefix);
String plain = ChatColor.stripColor(translated);
if (plain == null || plain.isEmpty()) return "";
// Discord nie obsługuje własnych kolorów tekstu w embedach; zachowujemy pogrubienie prefixu.
return LEGACY_COLOR.matcher(translated).find() && translated.matches("(?s).*§[lL].*")
? "**" + plain + "** " : plain + " ";
}
+2 -3
View File
@@ -1,10 +1,9 @@
# Token utworzysz w Discord Developer Portal. Nie udostępniaj go publicznie.
discord:
token: "WSTAW_TOKEN_BOTA"
channel-id: "WSTAW_ID_KANALU"
invite-link: "https://classicmc.top/discord/"
server:
brand: "ClassicMC.top"
# Kolor paska embeda w formacie HEX (domyślnie jasna zieleń).
title-img: "https://asmin.me/cdn/classicmc/logo-horizontal.webp"
embed-color: "#90EE90"
refresh-seconds: 180
+3
View File
@@ -6,3 +6,6 @@ author: Asmin_
website: https://asmin.me
description: Prosty status serwera Minecraft na Discordzie.
softdepend: [LuckPerms]
commands:
discord:
description: Pokazuje link do Discorda serwera.