🤖 Discord
Modul Discord propojuje Voidium s Discord serverem: whitelist/linkování, chat bridge, streamování konzole, status/topic a tickety.
GUILD_MEMBERS a MESSAGE_CONTENT.
Rychlá navigace
✅ Setup
Potřebuješ:
- Discord bot (Developer Portal) přidaný do guildy
- Povolené intents:
GUILD_MEMBERSaMESSAGE_CONTENT - Doporučené kanály: chat, link, console, status + ticket kategorie
Rychlý checklist:
- Uprav
config/voidium/discord.json - Nastav
enableDiscord: true,botToken,guildId - Nastav kanály:
chatChannelId(pro chat bridge)linkChannelId(doporučeno; viz poznámka)
- Restart serveru (hlavně při změně tokenu), nebo zkus
/voidium reloadpro menší změny
MESSAGE_CONTENT, aby bot mohl číst zprávy pro chat bridge.
⚙️ Konfigurace
Voidium používá dva soubory:
config/voidium/discord.json(bot, kanály, whitelist, chat bridge, status/topic, ban sync)config/voidium/tickets.json(ticket systém)
discord.json (klíčové položky)
Základ
enableDiscord,botToken,guildId
Kanály
chatChannelId— chat bridge kanálconsoleChannelId— streamování logůlinkChannelId— link kanál (zprávy s kódem se mažou)statusChannelId— status zprávy; když je prázdné, použije sechatChannelId
Whitelist & linkování
enableWhitelistkickMessage,verificationHintMessagelinkSuccessMessage,alreadyLinkedMessage,maxAccountsPerDiscord
Chat bridge
enableChatBridgeminecraftToDiscordFormat,discordToMinecraftFormatchatWebhookUrl(volitelné; webhook pro MC → Discord s avatarem podle skinu)
:alias: (kvůli renderingu ve Voidium klientu). Přepínač translateEmojis se aktuálně používá jen pro forward ticket zpráv (a efekt může být omezený podle mapování).
Status / topic
enableStatusMessages+ status textyenableTopicUpdate,channelTopicFormat,uptimeFormat
Ban sync
syncBansDiscordToMc,syncBansMcToDiscord- Ban sync používá Mixin injekci (
UserBanListMixin) pro automatickou detekci — žádný polling
Odpovědi bota
invalidCodeMessage,notLinkedMessagealreadyLinkedSingleMessage(%uuid%),alreadyLinkedMultipleMessage(%count%)unlinkSuccessMessage,wrongGuildMessageticketCreatedMessage,ticketClosingMessage,textChannelOnlyMessage
Role & prefixy
linkedRoleId— role při úspěšném linknutí (flow přes link kanál)rolePrefixes+useHexColors
tickets.json (TicketConfig)
Soubor: config/voidium/tickets.json
enableTicketsticketCategoryId,supportRoleIdticketChannelTopic(proměnné:%user%,%reason%)maxTicketsPerUser- Zprávy:
ticketCreatedMessage,ticketWelcomeMessage,ticketCloseMessage,noPermissionMessage,ticketLimitReachedMessage,ticketAlreadyClosedMessage - Transcript:
enableTranscript,transcriptFormat(TXT/JSON),transcriptFilename(podporuje%user%,%date%,%reason%) - In-game zprávy (barvy přes
&):mcBotNotConnectedMessage,mcGuildNotFoundMessage,mcCategoryNotFoundMessage,mcTicketCreatedMessage,mcDiscordNotFoundMessage
🔗 Whitelist & linkování
In-game (whitelist flow)
Když je whitelist zapnutý a hráč není propojený:
- Hráč se připojí a zůstane zmrazený (ne kicketnutý).
- V chatu dostane 6místný kód (
kickMessage+verificationHintMessage). - Kód vyprší po 10 minutách.
- Po úspěšném linku se hráč odblokuje.
Na Discordu
- Slash příkazy:
/link code:<code>/unlink
- Link kanál:
- Uživatel napíše kód do
linkChannelId - Bot zprávu smaže a odpoví (odpověď se po pár sekundách smaže)
- Volitelně přiřadí
linkedRoleId
- Uživatel napíše kód do
Data se ukládají do config/voidium/storage/links.json.
💬 Chat bridge
MC → Discord
- Trigger: běžný chat +
/say - Posílá se do
chatChannelId - Použije
minecraftToDiscordFormat - Pokud je
chatWebhookUrlvyplněné, použije se webhook (avatar podle skinu)
Discord → MC
- Zprávy z
chatChannelIdse forwardují do Minecraftu (když je chat bridge zapnutý) - Základní Markdown se převádí na MC formát (tučné/kurzíva/podtržení/přeškrtnutí)
- Některé Unicode emoji se převádí na
:alias:
Join / leave / death
Když je chat bridge zapnutý, join/leave/death eventy se posílají do Discordu jako barevné embedy s miniaturou skinu hráče:
- Join — zelený embed
- Leave — červený embed
- Death — šedý embed
🎫 Tickety
Discord slash příkazy
/ticket create reason:<reason>/ticket close
Vytváření ticketů má rate-limit (globální cooldown ~60 sekund), aby se zabránilo Discord 429.
In-game
/ticket <reason> <message...>/reply <message...>
Detailní syntaxe je tady: Příkazy.
Transcripty
Pokud jsou transcripty zapnuté:
- Voidium stáhne až ~100 posledních zpráv
- Nahraje TXT/JSON soubor do ticket kanálu
- A pak kanál pár sekund po uzavření smaže
🧯 Řešení problémů
Bot se nespustí
- Ověř
botTokenaguildId - Ověř, že jsou povolené intents v Developer Portalu
Discord → MC zprávy nechodí
enableDiscordaenableChatBridgemusí být true- Zkontroluj
chatChannelId - Ověř intent
MESSAGE_CONTENT
Linkování nefunguje
- Kód platí ~10 minut
- Ověř práva v
linkChannelId(send + delete)
Ticket se nevytvoří
- Ověř
ticketCategoryId+ práva bota - Počítej s globálním cooldownem ~60s