Discord Connector od nwesterhausen je obvyklý způsob, jak server Valheim přimět mluvit s Discordem. Je to plugin BepInEx, který běží jen na dedikovaném serveru, a posílá zprávy na webhook Discordu, když se server spustí, uloží a zastaví, když se hráči připojí, odejdou, zemřou, zakřičí nebo pingnou mapu, a když začne náhodný raid. Hráči nic neinstalují, takže funguje i na crossplay serverech s hráči na Xboxu. Nastavení má tři kroky: nainstaluj BepInEx a mód na server, vytvoř webhook v Discordu, vlož URL webhooku do vygenerované konfigurace a restartuj. Pak strávíš pět minut u dvou výchozích hodnot, které by většina lidí měla změnit - souřadnice hráčů ve zprávách a zmínky - dřív, než tvoje parta zjistí tvrdým způsobem, proč na nich záleží.
Je to jednosměrné. Discord Connector posílá zprávy ze hry na Discord; nepřenáší chat z Discordu zpátky do hry a neumožňuje z Discordu spouštět příkazy.
Co Discord Connector dělá a co ne#
Mód se zavěsí na události serveru a každou z nich změní na zprávu webhooku. Aktuální sada událostí podle dokumentace módu:
| Skupina | Události |
|---|---|
| Životní cyklus serveru | serverLaunch, serverStart, serverStop, serverShutdown, serverSave |
| Svět | newDayNumber, eventStart, eventPaused, eventResumed, eventStop |
| Hráči | playerJoin, playerLeave, playerShout, playerPing, playerDeath |
| Hráčovy první události | playerFirstJoin, playerFirstLeave, playerFirstShout, playerFirstPing, playerFirstDeath |
| Žebříčky | activePlayers, leaderboard1 až leaderboard5 |
Tyto názvy budou důležité později, až budeš směrovat události do různých kanálů. Kromě zpráv si mód vede i malou databázi aktivity hráčů, která pohání žebříčky jako nejvíc smrtí nebo nejvíc času online, a umí oznamovat „první“ události - třeba první smrt hráče na serveru.
Co není:
- Není to most chatu. Zprávy jdou jen z Valheimu na Discord. Nic napsaného na Discordu se do hry nedostane.
- Není to bot. Používá webhooky, takže tu není žádný účet bota, žádné slash příkazy a žádná vzdálená správa. K tomu viz boty Discordu pro správu herních serverů.
- Není to klientský mód. Nikdy nemusí být na počítačích hráčů a neobjevuje se v kontrole verzí. Jeho přidání neovlivní, kdo se může připojit.
Díky poslednímu bodu je to jeden z nejbezpečnějších modů, které lze provozovat. Nemění nic na hratelnosti, takže nemůže způsobit desync světa ani vyhazov kvůli neshodě verzí. Pokud se plugin po aktualizaci hry rozbije, nejhorší případ je, že server nenastartuje, dokud ho neodstraníš, a proto si pamatuj přesně, co je nainstalováno.
Než začneš: BepInEx na serveru#
Discord Connector je plugin BepInEx, takže server nejdřív potřebuje BepInExPack pro Valheim. Na nativní instalaci Linuxu to znamená rozbalit balíček do kořenové složky serveru - dostaneš složku BepInEx, doorstop_libs a skript start_server_bepinex.sh, který se stane startovacím příkazem. Na Dockeru s obrazem lloesche/valheim-server nastav BEPINEX=true. Na panelu buď použij variantu hry s BepInEx, pokud ji hostitel nabízí, nebo nahraj balíček přes správce souborů a změň startovací příkaz. Všechny tři způsoby popisuje mody Valheim s BepInEx na serveru.
Spusť server jednou jen s BepInEx a zkontroluj log. Měl bys vidět vlastní banner BepInEx a řádek s počtem načtených pluginů. Pokud BepInEx neběží, nebude fungovat nic dalšího a chyba bude vypadat jako vina módu, i když není.
Instalace módu#
- Stáhni Discord Connector z Thunderstore (balíček je
nwesterhausen-DiscordConnector). Pokud vaše parta používá r2modman, můžeš ho nainstalovat do profilu a soubory odtud zkopírovat, ale na serveru potřebuješ jen soubory. - Zastav server.
- Otevři zip. Zkopíruj obsah jeho složky
pluginsdoBepInEx/plugins/na serveru. Některé verze obsahují víc než jedno.dll- zkopíruj všechna, patří k sobě. - Spusť server, nech ho plně načíst a pak ho znovu čistě zastav.
Při prvním startu mód vytvoří svou konfiguraci. Od verze 2.1.0 používá vlastní složku místo jednoho souboru:
BepInEx/config/games.nwest.valheim.discordconnector/ discordconnector.cfg main settings, webhooks discordconnector-messages.cfg the text of each message discordconnector-toggles.cfg which messages and details are on discordconnector-variables.cfg custom variables for messages discordconnector-leaderBoards.cfg leaderboard definitions config-debug.json a dump of the config, webhooks redacted records.db player activity databaseV BepInEx/LogOutput.log by měl být řádek o načtení pluginu s jeho verzí, něco jako Loading [DiscordConnector 3.1.0]. Pokud složka nevznikla, plugin se nenačetl - viz sekce o řešení potíží.
Vytvoření webhooku v Discordu#
Webhook je URL, která dovoluje komukoli, kdo ji drží, psát do jednoho kanálu. Potřebuješ oprávnění Manage Webhooks na serveru Discordu.
- V Discordu otevři nastavení kanálu, kam mají zprávy chodit.
- Jdi na Integrations, pak Webhooks, pak New Webhook.
- Dej mu jméno a případně avatar - mód umí obojí přepsat.
- Zkopíruj URL webhooku.
Pro každý kanál, kam chceš zprávy, vytvoř samostatný webhook. Běžné uspořádání je jeden veřejný kanál pro aktivitu hráčů a jeden jen pro adminy pro zprávy o životním cyklu serveru. Webhooky podrobněji, včetně limitů rychlosti, popisují webhooky Discordu pro stav serveru.
Hlavní konfigurační soubor#
Otevři discordconnector.cfg. Konfigurační soubory BepInEx jsou prostý text s komentářem nad každým nastavením, který ho popisuje, a jeho výchozí hodnotou. Hodnoty se neuvozují. Nastavení, na kterých záleží první den:
Webhook URL = https://discord.com/api/webhooks/REPLACE/MEWebhook Events = ALLWebhook Username Override = ValheimSecondary Webhook URL =Secondary Webhook Events = ALLSend Positions with Messages = falseAllow Mentions for @here and @everyone = falseAllow Role Mentions = falseAllow User Mentions = falseIgnored Players =Collect Player Stats = trueAnnounce Player Firsts = trueHodnoty uprav na místě a ponech hlavičky sekcí a komentáře, které v souboru jsou. Úplná sada klíčů s výchozími hodnotami:
| Klíč | Výchozí | Co dělá |
|---|---|---|
Webhook URL | prázdné | Hlavní webhook. Dokud není nastaven, nic se neposílá |
Webhook Events | ALL | Které události jdou na hlavní webhook |
Secondary Webhook URL | prázdné | Volitelný druhý webhook |
Secondary Webhook Events | ALL | Které události jdou na druhý webhook |
Webhook Username Override | prázdné | Jméno zobrazené u zpráv |
Webhook Avatar Override | prázdné | URL obrázku pro avatar |
Use fancier discord messages | false | Používá embedy, hlavně pro podrobnosti o poloze |
Send Positions with Messages | true | Přidává do zpráv souřadnice |
Collect Player Stats | true | Zaznamenává aktivitu do records.db |
Announce Player Firsts | true | Zveřejňuje první připojení, smrt hráče a podobně |
Ignored Players | prázdné | Jména, která se mají vynechat, oddělená ; |
Ignored Players (Regex) | prázdné | Regulární výraz .NET pro jména, která se mají vynechat |
Allow Mentions for @here and @everyone | false | Dovolí zprávám pingnout všechny |
Allow Role Mentions | true | Dovolí zprávám pingnout role |
Allow User Mentions | true | Dovolí zprávám pingnout uživatele |
Názvy klíčů a výchozí hodnoty se mezi hlavními verzemi módu měnily. Pokud se tvůj soubor od této tabulky liší, platí tvůj soubor pro tvou verzi - komentáře nad každým nastavením jsou dokumentace, která odpovídá. Po úpravě server restartuj, aby se nové hodnoty načetly.
Směrování událostí do různých kanálů#
Webhook Events přijímá buď ALL, nebo seznam názvů událostí oddělených středníky. Kromě jednotlivých názvů z první tabulky existují zkratky: serverLifecycle (launch, start, stop, shutdown), eventLifecycle (začátek raidu, pauza, pokračování, konec), playerAll, playerFirstAll a leaderboardsAll.
Rozumné rozdělení pro skupinový server:
# #valheim - what players care aboutWebhook URL = https://discord.com/api/webhooks/1111/aaaaWebhook Events = playerAll;playerFirstAll;eventLifecycle;leaderboardsAll# #server-admin - what admins care aboutSecondary Webhook URL = https://discord.com/api/webhooks/2222/bbbbSecondary Webhook Events = serverLifecycle;serverSaveSměrování rozhoduje jen o tom, kam zpráva jde. O tom, jestli se vůbec pošle, rozhoduje discordconnector-toggles.cfg, který má sekce pro zprávy, polohy, statistiky a ladicí výstup. Pokud nasměruješ serverSave do kanálu a nic se neobjeví, zpráva o uložení je pravděpodobně v souboru přepínačů vypnutá. Zprávy o uložení jsou hlučné - jedna za každý interval ukládání - takže je obvykle správné nechat je vypnuté nebo je posílat jen do adminského kanálu.
Psaní vlastních zpráv#
discordconnector-messages.cfg obsahuje text každé události. Zprávy o hráčích jsou ve výchozím stavu prosté řádky:
Player Join Message = %PLAYER_NAME% has joined.Player Leave Message = %PLAYER_NAME% has left.Player Death Message = %PLAYER_NAME% has died.Player Ping Message = %PLAYER_NAME% pings the map.Player Shout Message = %PLAYER_NAME% shouts **%SHOUT%**.Dej do jednoho nastavení víc zpráv oddělených ; a mód pokaždé vybere náhodnou:
Player Death Message = %PLAYER_NAME% has gone to Valhalla.;%PLAYER_NAME% died. Again.;Odin claims %PLAYER_NAME%.Markdown Discordu ve zprávách funguje, takže **bold** je na Discordu tučné. Dostupné proměnné:
| Proměnná | Hodnota |
|---|---|
%PLAYER_NAME% | Jméno postavy |
%PLAYER_ID% | ID hráče na platformě (%PLAYER_STEAMID% je starší název) |
%POS% | Souřadnice hráče |
%SHOUT% | Zakřičený text, jen ve zprávách o křiku |
%WORLD_NAME% | Svět, dostupný po načtení |
%NUM_PLAYERS% | Počet hráčů online |
%DAY_NUMBER% | Den ve hře |
%JOIN_CODE% | Kód pro připojení v crossplayi, bez crossplaye prázdný |
%PUBLICIP% | Veřejná adresa serveru |
%TIMESTAMP% | Časová značka Discordu, zobrazená v časovém pásmu každého čtenáře |
%VAR1% až %VAR10% | Tvé vlastní hodnoty z discordconnector-variables.cfg |
Dvě z nich stojí za záměrné použití. %JOIN_CODE% ve zprávě o startu serveru řeší problém crossplaye, že se kód pro připojení mění při každém restartu: nový kód se na Discord dostane sám. A vlastní proměnné ti dovolí držet jeden kus textu - adresu serveru, odkaz na pravidla - na jednom místě a použít ho ve více zprávách. Pozor, %PUBLICIP% se zjišťuje z vnější služby při spuštění serveru, takže závisí na tom, že server smí navazovat odchozí spojení. Jak kód pro připojení funguje, popisuje crossplay a hráči na Xboxu ve Valheimu.
Soukromí, zmínky a žebříčky#
Dvě výchozí hodnoty si zaslouží druhý pohled na každém serveru s víc než pár důvěryhodnými přáteli.
Polohy. Send Positions with Messages je ve výchozím stavu true, takže zprávy o připojení, odchodu, smrti, křiku a pingu nesou souřadnice. Na soukromém serveru mezi přáteli je to šikovné - zpráva o smrti se souřadnicemi je zdarma značka náhrobku. Na PvP serveru nebo jakémkoli veřejném serveru to zveřejňuje, kde má kdo základnu a kde se hráči odhlašují. Vypni to globálně, nebo použij sekci poloh v souboru přepínačů a nech je jen u smrtí.
Zmínky. Zmínky rolí a uživatelů jsou ve výchozím stavu povolené a dokumentace výslovně říká, že vstup hráčů se nefiltruje. Křik obsahující zmínku role může tuto roli přes webhook pingnout. Vypni zmínky rolí a uživatelů, pokud je nepotřebuješ, a pokud ano, pomocí Specifically Allowed Role Mentions a Specifically Allowed User Mentions vypiš přesná ID, která smějí být zmíněna. @here a @everyone nech vypnuté.
Admini a boti. Ignored Players přijímá seznam jmen, která se ve zprávách vynechají, a Ignored Players (Regex) vzorec. Použij to pro adminské postavy, které nechceš oznamovat, nebo pro NPC, které některé mody registrují jako hráče.
Databáze hráčů ukládá vedle jmen i ID platforem. Pro žebříček je to v pořádku, ale jsou to osobní údaje; pokud má vaše komunita pravidla pro data, Collect Player Stats = false to vypne.
Žebříčky
Soubor žebříčků definuje až pět vlastních žebříčků plus žebříček aktivních hráčů, každý se posílá na časovač. Každý si vybere statistiku - smrti, připojení, čas online a podobně - časový rozsah a počet zobrazených záznamů. Čtou z records.db, takže potřebují zapnuté Collect Player Stats. Týdenní žebříček „nejvíc smrtí“ je spolehlivý zdroj vtipů pro partu; denní se ignoruje. Začni jedním a uvidíš, jestli ho někdo čte.
How to discern players in Record Retrieval rozhoduje, jestli žebříček počítá podle ID platformy, jména postavy, nebo obojího. Výchozí PlayerId slučuje všechny postavy hráče do jednoho záznamu. Zvol Name, pokud se má každá postava počítat zvlášť.
Řešení potíží#
Konfigurační složka se neobjevila. Plugin se nenačetl. V BepInEx/LogOutput.log zkontroluj řádek o načtení pluginu. Pokud BepInEx v logu není, server startuje bez něj - zkontroluj startovací příkaz. Pokud se BepInEx načte, ale plugin hlásí chybu, zkontroluj, že verze pluginu podporuje aktuální verzi hry a že jsi zkopíroval všechny soubory ze složky plugins v zipu.
Konfigurace existuje, ale na Discord nic nedorazí. Zkontroluj postupně: URL webhooku je úplná a bez uvozovek, událost je v Webhook Events, zpráva je zapnutá v souboru přepínačů a server může navazovat odchozí spojení HTTPS. Nastav Log Debug Messages = true, restartuj a log ti řekne, co se mód pokusil poslat.
Zprávy přestaly po aktualizaci Valheimu. Plugin možná potřebuje aktualizaci. Podívej se na jeho stránku na Thunderstore a changelog. Mody, které na hratelnost nesahají, obvykle dohánějí rychle, ale ne vždy ve stejný den. Obecnou rutinu má co dělat, když aktualizace módu něco rozbije.
Duplicitní zprávy. Obvykle dvě kopie pluginu v BepInEx/plugins - jedna v podsložce z dřívější instalace. Odstraň starou.
Discord ukazuje „rate limited“ nebo zprávy zahazuje. Příliš mnoho událostí na jeden webhook v krátké době, typicky uložení nebo pingy na rušném serveru. Vypni ty hlučné nebo je rozděl mezi webhooky. Pokud chceš i záznam o každé události, log serveru ho už má - viz čtení logu serveru Valheim.
FAQ#
Musí hráči Discord Connector instalovat?
Ne. Běží jen na dedikovaném serveru. Hráči se připojují s nemodifikovanou hrou, včetně hráčů na Xboxu a Game Pass na crossplay serveru.
Umí Discord Connector posílat chat z Discordu do hry?
Ne. Je jednosměrný, ze hry na Discord, přes webhooky. Obousměrný most nebo vzdálené příkazy potřebují jiný mód nebo bota s vlastním účtem.
Kde je konfigurační soubor Discord Connectoru?
V BepInEx/config/games.nwest.valheim.discordconnector/, vytvořeném při prvním startu po instalaci módu. Hlavní soubor je discordconnector.cfg; zprávy, přepínače, proměnné a žebříčky mají vedle sebe každý vlastní soubor.
Jak zveřejním kód pro crossplay připojení na Discordu?
Přidej %JOIN_CODE% do zprávy o startu serveru v discordconnector-messages.cfg. Kód se doplní po načtení světa a protože se při každém restartu vygeneruje nový, zpráva udržuje Discord automaticky aktuální.
Je bezpečné nechat polohy zapnuté?
Na malém soukromém serveru ano. Na veřejném nebo PvP serveru ne: souřadnice ve zprávách o připojení, odchodu a smrti ukazují všem, kde jsou základny a hráči. Vypni Send Positions with Messages nebo je omez na smrti.


