This commit is contained in:
1 parent
895a33dc2f
commit
87f6c8ab1a
4 files changed
+24
-9
No files matched your search
@@ -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 + " ";
|
||||
}
|
||||
|
||||
@@ -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
|
||||
@@ -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.
|
||||
Reference in new issue
Block a user