RE:NODE

Valheim Discord Connector: webhook-ები, შესვლები და სიკვდილები

ავტორი RE:NODE-ის გუნდი
11 წუთის საკითხავი


Discord Connector, nwesterhausen-ისგან, Valheim სერვერის Discord-თან დასაკავშირებელი ჩვეულებრივი გზაა. ეს BepInEx plugin-ია, რომელიც მხოლოდ dedicated server-ზე მუშაობს და Discord webhook-ზე წერს, როცა სერვერი იწყება, ინახავს და ჩერდება, როცა მოთამაშეები შედიან, გადიან, კვდებიან, ყვირიან ან რუკას ნიშნავენ, და როცა შემთხვევითი რეიდი იწყება. მოთამაშეებს არაფერი უყენდებათ, ამიტომ ის Xbox-ის მოთამაშეებიან crossplay სერვერებზეც მუშაობს. დაყენება სამი ნაბიჯია: დააყენე BepInEx და მოდი სერვერზე, შექმენი webhook Discord-ში, ჩასვი webhook URL გენერირებულ კონფიგურაციაში და გადატვირთე. შემდეგ ხუთი წუთი დახარჯე ორ ნაგულისხმევზე, რომელიც უმეტესმა უნდა შეცვალოს - მოთამაშის კოორდინატები შეტყობინებებში და მოხსენიებები - სანამ შენი ჯგუფი გაიგებს, რატომ აქვთ მნიშვნელობა.

ის ცალმხრივია. Discord Connector შეტყობინებებს თამაშიდან Discord-ში აგზავნის; ის Discord-ის ჩატს თამაშში არ გადააქვს და Discord-იდან ბრძანებების გაშვების საშუალებას არ იძლევა.

რას აკეთებს Discord Connector და რას არა#

მოდი სერვერის მოვლენებს იჭერს და თითოეულს webhook შეტყობინებად აქცევს. მოვლენების მიმდინარე ნაკრები, მოდის დოკუმენტაციიდან:

ჯგუფიმოვლენები
სერვერის სასიცოცხლო ციკლიserverLaunch, serverStart, serverStop, serverShutdown, serverSave
სამყაროnewDayNumber, eventStart, eventPaused, eventResumed, eventStop
მოთამაშეებიplayerJoin, playerLeave, playerShout, playerPing, playerDeath
მოთამაშეების "პირველები"playerFirstJoin, playerFirstLeave, playerFirstShout, playerFirstPing, playerFirstDeath
ლიდერბორდებიactivePlayers, leaderboard1-დან leaderboard5-მდე

ეს სახელები მოგვიანებით მნიშვნელოვანი იქნება, როცა მოვლენებს სხვადასხვა არხზე გადაანაწილებ. შეტყობინებების გარდა, მოდი მოთამაშეების აქტივობის პატარა მონაცემთა ბაზასაც ინახავს, რომელიც ლიდერბორდებს ამუშავებს, მაგალითად ყველაზე მეტი სიკვდილი ან ყველაზე მეტი დრო ონლაინში, და შეუძლია "პირველების" გამოცხადება - მაგალითად, მოთამაშის პირველი სიკვდილი სერვერზე.

რა არ არის:

  • არ არის ჩატის ხიდი. შეტყობინებები მხოლოდ Valheim-იდან Discord-ისკენ მიდის. Discord-ში აკრეფილი არაფერი აღწევს თამაშს.
  • არ არის ბოტი. ის webhook-ებს იყენებს, ამიტომ ბოტის ანგარიში, slash ბრძანებები და დისტანციური ადმინისტრირება არ არის. ამისთვის იხილე Discord-ის ბოტები თამაშის სერვერის ადმინისტრირებისთვის.
  • არ არის კლიენტის მოდი. მას არასდროს სჭირდება მოთამაშეების კომპიუტერებზე და ვერსიის შემოწმებებში არ ჩნდება. დამატება არ ცვლის, ვის შეუძლია შესვლა.

ეს უკანასკნელი მას ერთ-ერთ ყველაზე უსაფრთხო მოდად ხდის. ის გეიმფლეიში არაფერს ცვლის, ამიტომ სამყაროს desync-ს ვერ გამოიწვევს და ვერსიის შეუსაბამობის გამო ვერავის გააგდებს. თუ plugin თამაშის განახლების შემდეგ გაფუჭდა, უარესი შემთხვევა ისაა, რომ სერვერი არ ჩაირთვება, სანამ არ მოხსნი, ამიტომ ინახავ ჩანაწერს, ზუსტად რა არის დაყენებული.

სანამ დაიწყებ: BepInEx სერვერზე#

Discord Connector BepInEx plugin-ია, ამიტომ სერვერს ჯერ Valheim-ის BepInExPack სჭირდება. მშობლიურ Linux დაყენებაზე ეს ნიშნავს პაკეტის სერვერის root საქაღალდეში გახსნას - მიიღებ BepInEx დირექტორიას, doorstop_libs-სა და start_server_bepinex.sh სკრიპტს, რომელიც გაშვების ბრძანებად იქცევა. lloesche/valheim-server image-ით Docker-ზე დააყენე BEPINEX=true. პანელზე ან გამოიყენე თამაშის BepInEx ვარიანტი, თუ შენი ჰოსტი გთავაზობს, ან ატვირთე პაკეტი ფაილების მმართველით და შეცვალე გაშვების ბრძანება. სამივეს ფარავს Valheim-ის მოდები BepInEx-ით სერვერზე.

გაუშვი სერვერი ერთხელ მხოლოდ BepInEx-ით და შეამოწმე ლოგი. უნდა ნახო BepInEx-ის საკუთარი ბანერი და ხაზი, რომელიც ამბობს, რამდენი plugin ჩაიტვირთა. თუ BepInEx არ მუშაობს, ამ ნაბიჯის შემდეგ არაფერი იმუშავებს და შეცდომა მოდის ბრალად გამოჩნდება, თუმცა ის არ არის.

მოდის დაყენება#

  1. ჩამოტვირთე Discord Connector Thunderstore-დან (პაკეტი არის nwesterhausen-DiscordConnector). თუ შენი ჯგუფი r2modman-ს იყენებს, შეგიძლია პროფილში დააყენო და იქიდან ფაილები დააკოპირო, მაგრამ სერვერზე მხოლოდ ფაილები გჭირდება.
  2. გააჩერე სერვერი.
  3. გახსენი zip. დააკოპირე მისი plugins საქაღალდის შიგთავსი სერვერზე BepInEx/plugins/-ში. ზოგ ვერსიას ერთზე მეტი .dll მოჰყვება - დააკოპირე ყველა, ისინი ერთად მუშაობენ.
  4. გაუშვი სერვერი, დაელოდე სრულ ჩატვირთვას, შემდეგ ისევ სუფთად გააჩერე.

პირველ გაშვებაზე მოდი თავის კონფიგურაციას ქმნის. ვერსია 2.1.0-დან ის ერთი ფაილის ნაცვლად საკუთარ საქაღალდეს იყენებს:

code
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 database

BepInEx/LogOutput.log-ში უნდა იყოს plugin-ის ჩატვირთვის ხაზი მისი ვერსიით, მსგავსი რამ Loading [DiscordConnector 3.1.0]. თუ საქაღალდე არ შეიქმნა, plugin არ ჩატვირთულა - იხილე პრობლემების გადაჭრის განყოფილება.

webhook-ის შექმნა Discord-ში#

webhook URL-ია, რომელიც ნებისმიერ მფლობელს ერთ არხში წერის საშუალებას აძლევს. Discord სერვერზე გჭირდება Manage Webhooks უფლება.

  1. Discord-ში გახსენი იმ არხის პარამეტრები, სადაც შეტყობინებები უნდა მივიდეს.
  2. გადადი Integrations, შემდეგ Webhooks, შემდეგ New Webhook.
  3. დაარქვი სახელი და, თუ გინდა, avatar - მოდს ორივეს გადაფარვა შეუძლია.
  4. დააკოპირე webhook URL.

შექმენი ცალკე webhook თითოეული არხისთვის, სადაც შეტყობინებები გინდა. გავრცელებული დაყენებაა ერთი საჯარო არხი მოთამაშეების აქტივობისთვის და ერთი მხოლოდ ადმინებისთვის სერვერის სასიცოცხლო ციკლის შეტყობინებებისთვის. Discord webhooks for server status webhook-ებს უფრო დეტალურად განმარტავს, rate limit-ების ჩათვლით.

მთავარი კონფიგურაციის ფაილი#

გახსენი discordconnector.cfg. BepInEx-ის კონფიგურაციის ფაილები უბრალო ტექსტია, ყოველი პარამეტრის ზემოთ კომენტარით, რომელიც მას და მის ნაგულისხმევს აღწერს. მნიშვნელობები ბრჭყალებში არ იწერება. პარამეტრები, რომლებიც პირველ დღეს მნიშვნელოვანია:

discordconnector.cfg (relevant lines)
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 = true

შეცვალე მნიშვნელობები ადგილზე და ფაილში უკვე არსებული სექციების სათაურები და კომენტარები დატოვე. გასაღებების სრული ნაკრები ნაგულისხმევით:

გასაღებინაგულისხმევირას აკეთებს
Webhook URLცარიელიმთავარი webhook. არაფერი იგზავნება, სანამ არ დაყენდება
Webhook EventsALLრომელი მოვლენები მიდის მთავარ webhook-ზე
Secondary Webhook URLცარიელიარასავალდებულო მეორე webhook
Secondary Webhook EventsALLრომელი მოვლენები მიდის მეორე webhook-ზე
Webhook Username Overrideცარიელიშეტყობინებებზე ნაჩვენები სახელი
Webhook Avatar Overrideცარიელიavatar-ის სურათის URL
Use fancier discord messagesfalseიყენებს embed-ებს, ძირითადად პოზიციის დეტალებისთვის
Send Positions with Messagestrueშეტყობინებებს კოორდინატებს უმატებს
Collect Player Statstrueაქტივობას records.db-ში წერს
Announce Player Firststrueაქვეყნებს მოთამაშის პირველ შესვლას, სიკვდილს და ა.შ.
Ignored Playersცარიელიგამოსატოვებელი სახელები, ;-ით გამოყოფილი
Ignored Players (Regex)ცარიელი.NET რეგულარული გამოსახულება გამოსატოვებელი სახელებისთვის
Allow Mentions for @here and @everyonefalseშეტყობინებებს ყველას დაპინგვის უფლებას აძლევს
Allow Role Mentionstrueშეტყობინებებს როლების დაპინგვის უფლებას აძლევს
Allow User Mentionstrueშეტყობინებებს მომხმარებლების დაპინგვის უფლებას აძლევს

გასაღებების სახელები და ნაგულისხმევები მოდის მთავარ ვერსიებს შორის შეიცვალა. თუ შენი ფაილი ამ ცხრილისგან განსხვავდება, შენი ფაილი შენი ვერსიისთვის სწორია - თითოეული პარამეტრის ზემოთ კომენტარები დოკუმენტაციაა, რომელიც შეესაბამება. რედაქტირების შემდეგ გადატვირთე სერვერი, რომ ახალი მნიშვნელობები წაიკითხოს.

მოვლენების გადანაწილება სხვადასხვა არხზე#

Webhook Events იღებს ან ALL-ს, ან მოვლენების სახელების სიას წერტილ-მძიმით გამოყოფილს. პირველ ცხრილში ცალკეული სახელების გარდა არის შემოკლებები: serverLifecycle (launch, start, stop, shutdown), eventLifecycle (რეიდის დაწყება, პაუზა, გაგრძელება, გაჩერება), playerAll, playerFirstAll და leaderboardsAll.

გონივრული გაყოფა ჯგუფური სერვერისთვის:

discordconnector.cfg (two channels)
# #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;serverSave

გადანაწილება მხოლოდ წყვეტს, სად მიდის შეტყობინება. საერთოდ იგზავნება თუ არა, discordconnector-toggles.cfg წყვეტს, რომელსაც აქვს სექციები შეტყობინებებისთვის, პოზიციებისთვის, სტატისტიკისა და debug გამოტანისთვის. თუ serverSave არხზე გადაანაწილე და არაფერი ჩნდება, შენახვის შეტყობინება ალბათ toggles ფაილში გამორთულია. შენახვის შეტყობინებები ხმაურიანია - ერთი ყოველ შენახვის ინტერვალზე - ამიტომ მათი გამორთვა ან მხოლოდ ადმინის არხზე გაგზავნა ჩვეულებრივ სწორია.

საკუთარი შეტყობინებების წერა#

discordconnector-messages.cfg ყოველი მოვლენის ტექსტს შეიცავს. მოთამაშის შეტყობინებები ნაგულისხმევად უბრალო ხაზებია:

discordconnector-messages.cfg (player messages)
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%**.

ჩადე რამდენიმე შეტყობინება ერთ პარამეტრში ;-ით გამოყოფილი და მოდი ყოველ ჯერზე შემთხვევითს აირჩევს:

ini
Player Death Message = %PLAYER_NAME% has gone to Valhalla.;%PLAYER_NAME% died. Again.;Odin claims %PLAYER_NAME%.

Discord markdown შეტყობინებებში მუშაობს, ამიტომ **bold** Discord-ში მუქია. ხელმისაწვდომი ცვლადები:

ცვლადიმნიშვნელობა
%PLAYER_NAME%პერსონაჟის სახელი
%PLAYER_ID%მოთამაშის პლატფორმის ID (%PLAYER_STEAMID% უფრო ძველი სახელია)
%POS%მოთამაშის კოორდინატები
%SHOUT%გაყვირებული ტექსტი, მხოლოდ shout შეტყობინებებში
%WORLD_NAME%სამყარო, ხელმისაწვდომია ჩატვირთვის შემდეგ
%NUM_PLAYERS%ონლაინ მოთამაშეები
%DAY_NUMBER%თამაშის დღე
%JOIN_CODE%crossplay-ის შესვლის კოდი, crossplay-ის გარეშე ცარიელი
%PUBLICIP%სერვერის საჯარო მისამართი
%TIMESTAMP%Discord-ის დროის ნიშნული, რომელიც თითოეული მკითხველის დროის სარტყელში ჩანს
%VAR1%-დან %VAR10%-მდეშენი საკუთარი მნიშვნელობები discordconnector-variables.cfg-დან

ამათგან ორს შეგნებული გამოყენება ღირს. %JOIN_CODE% სერვერის გაშვების შეტყობინებაში crossplay-ის პრობლემას წყვეტს, რომ შესვლის კოდი ყოველ restart-ზე იცვლება: ახალი კოდი თავისით ხვდება Discord-ში. საკუთარი ცვლადები კი საშუალებას გაძლევს ერთი ტექსტი - სერვერის მისამართი, წესების ბმული - ერთ ადგილას შეინახო და შეტყობინებებში ხელახლა გამოიყენო. გაითვალისწინე, რომ %PUBLICIP% გარე სერვისიდან მიიღება სერვერის გაშვებისას, ამიტომ სერვერს გამავალი კავშირები უნდა ჰქონდეს ნებადართული. Valheim-ის crossplay და Xbox მოთამაშეები განმარტავს, როგორ მუშაობს შესვლის კოდი.

კონფიდენციალურობა, მოხსენიებები და ლიდერბორდები#

ორ ნაგულისხმევს მეორედ დახედვა ეკუთვნის ნებისმიერ სერვერზე, სადაც რამდენიმე სანდო მეგობარზე მეტია.

პოზიციები. Send Positions with Messages ნაგულისხმევად true-ა, ამიტომ შესვლის, გასვლის, სიკვდილის, ყვირილისა და ping-ის შეტყობინებები კოორდინატებს ატარებენ. პირად სერვერზე მეგობრებს შორის ეს მოხერხებულია - სიკვდილის შეტყობინება კოორდინატებით უფასო საფლავის ქვის მარკერია. PvP სერვერზე ან ნებისმიერ საჯარო სერვერზე ის ყველას ბაზის ადგილს და თითოეული მოთამაშის გასვლის ადგილს აქვეყნებს. გამორთე გლობალურად ან toggles ფაილის პოზიციების სექცია გამოიყენე, რომ მხოლოდ სიკვდილებისთვის დარჩეს.

მოხსენიებები. როლებისა და მომხმარებლების მოხსენიებები ნაგულისხმევად ნებადართულია და დოკუმენტაცია მკაფიოდ ამბობს, რომ მოთამაშის შეყვანა არ ფილტრდება. shout, რომელიც როლის მოხსენიებას შეიცავს, შეიძლება webhook-ით ამ როლს დაპინგავდეს. გამორთე როლებისა და მომხმარებლების მოხსენიებები, თუ არ გჭირდება, და თუ გჭირდება, Specifically Allowed Role Mentions და Specifically Allowed User Mentions გამოიყენე იმ ზუსტი ID-ების ჩამოსათვლელად, რომლებიც შეიძლება მოიხსენიონ. @here და @everyone გამორთული დატოვე.

ადმინები და ბოტები. Ignored Players შეტყობინებებიდან გამოსატოვებელი სახელების სიას იღებს, Ignored Players (Regex) კი შაბლონს. გამოიყენე ადმინის პერსონაჟებისთვის, რომელთა გამოცხადებაც არ გინდა, ან NPC-ებისთვის, რომლებსაც ზოგი მოდი მოთამაშეებად არეგისტრირებს.

მოთამაშეების მონაცემთა ბაზა სახელებთან ერთად პლატფორმის ID-ებსაც ინახავს. ლიდერბორდისთვის ეს კარგია, მაგრამ პერსონალური მონაცემებია; თუ შენს საზოგადოებას მონაცემებზე წესები აქვს, Collect Player Stats = false მას გამორთავს.

ლიდერბორდები

ლიდერბორდების ფაილი ხუთამდე საკუთარ ლიდერბორდს და აქტიური მოთამაშეების დაფას განსაზღვრავს, თითოეულს ტაიმერზე გაგზავნით. თითოეული ირჩევს სტატისტიკას - სიკვდილები, შესვლები, ონლაინ დრო და ა.შ. - დროის დიაპაზონს და რამდენი ჩანაწერი აჩვენოს. ისინი records.db-დან კითხულობენ, ამიტომ Collect Player Stats ჩართული უნდა იყოს. ყოველკვირეული "ყველაზე მეტი სიკვდილი" დაფა ჯგუფისთვის ხუმრობების სანდო წყაროა; ყოველდღიურს უგულებელყოფენ. დაიწყე ერთით და ნახე, ვინმე კითხულობს თუ არა.

How to discern players in Record Retrieval წყვეტს, დაფა პლატფორმის ID-ით, პერსონაჟის სახელით თუ ორივეთი ითვლის. ნაგულისხმევი PlayerId მოთამაშის ყველა პერსონაჟს ერთ ჩანაწერში აერთიანებს. აირჩიე Name, თუ თითოეული პერსონაჟი ცალკე უნდა ჩაითვალოს.

პრობლემების გადაჭრა#

კონფიგურაციის საქაღალდე არ გაჩნდა. plugin არ ჩატვირთულა. შეამოწმე BepInEx/LogOutput.log plugin-ის ჩატვირთვის ხაზისთვის. თუ BepInEx თვითონ ლოგში არ არის, სერვერი მის გარეშე იწყება - შეამოწმე გაშვების ბრძანება. თუ BepInEx იტვირთება, მაგრამ plugin შეცდომას იძლევა, შეამოწმე, რომ plugin-ის ვერსია თამაშის მიმდინარე ვერსიას უჭერს მხარს და zip-ის plugins საქაღალდიდან ყველა ფაილი დააკოპირე.

კონფიგურაცია არსებობს, მაგრამ Discord-ში არაფერი აღწევს. შეამოწმე თანმიმდევრობით: webhook URL სრულია და ბრჭყალების გარეშე, მოვლენა Webhook Events-შია, შეტყობინება toggles ფაილში ჩართულია და სერვერს გამავალი HTTPS კავშირების უფლება აქვს. დააყენე Log Debug Messages = true, გადატვირთე და ლოგი გეტყვის, რის გაგზავნას ცდილობდა მოდი.

შეტყობინებები Valheim-ის განახლების შემდეგ შეწყდა. plugin-ს შეიძლება განახლება სჭირდებოდეს. შეამოწმე მისი Thunderstore-ის გვერდი და changelog. მოდები, რომლებიც გეიმფლეის არ ეხებიან, ჩვეულებრივ სწრაფად ეწევიან, მაგრამ არა ყოველთვის იმავე დღეს. ზოგად რუტინას შეიცავს რა გააკეთო, როცა მოდის განახლება აფუჭებს.

გაორმაგებული შეტყობინებები. ჩვეულებრივ plugin-ის ორი ასლია BepInEx/plugins-ში - ერთი ქვესაქაღალდეში უფრო ადრინდელი დაყენებიდან. წაშალე ძველი.

Discord აჩვენებს "rate limited"-ს ან შეტყობინებებს კარგავს. ერთ webhook-ზე ბევრი მოვლენა მცირე დროში, ჩვეულებრივ შენახვები ან ping-ები დატვირთულ სერვერზე. გამორთე ხმაურიანები ან გაანაწილე webhook-ებზე. თუ ყოველი მოვლენის ჩანაწერიც გინდა, სერვერის ლოგს უკვე აქვს - იხილე Valheim სერვერის ლოგის წაკითხვა.

FAQ#

უნდა დააყენონ მოთამაშეებმა Discord Connector?

არა. ის მხოლოდ dedicated server-ზე მუშაობს. მოთამაშეები შეუცვლელი თამაშით უერთდებიან, crossplay სერვერზე Xbox-ისა და Game Pass-ის მოთამაშეების ჩათვლით.

შეუძლია Discord Connector-ს Discord-ის ჩატის თამაშში გაგზავნა?

არა. ის ცალმხრივია, თამაშიდან Discord-ისკენ, webhook-ებით. ორმხრივი ხიდი ან დისტანციური ბრძანებები სხვა მოდს ან საკუთარი ანგარიშის მქონე ბოტს საჭიროებს.

სად არის Discord Connector-ის კონფიგურაციის ფაილი?

BepInEx/config/games.nwest.valheim.discordconnector/-ში, მოდის დაყენების შემდეგ პირველ გაშვებაზე იქმნება. მთავარი ფაილია discordconnector.cfg; შეტყობინებებს, toggles-ს, ცვლადებსა და ლიდერბორდებს თითოეულს თავისი ფაილი აქვს მის გვერდით.

როგორ გამოვაქვეყნო crossplay-ის შესვლის კოდი Discord-ში?

დაამატე %JOIN_CODE% სერვერის გაშვების შეტყობინებაში discordconnector-messages.cfg-ში. კოდი ივსება სამყაროს ჩატვირთვის შემდეგ და რადგან ახალი კოდი ყოველ restart-ზე გენერირდება, შეტყობინება Discord-ს ავტომატურად განახლებულს ინახავს.

უსაფრთხოა პოზიციების ჩართულად დატოვება?

პატარა პირად სერვერზე - დიახ. საჯარო ან PvP სერვერზე - არა: შესვლის, გასვლისა და სიკვდილის შეტყობინებებში კოორდინატები ყველას აჩვენებს, სად არის ბაზები და მოთამაშეები. გამორთე Send Positions with Messages ან შეზღუდე სიკვდილებით.