Ustvarjanje bota Discord na .NET Core z namestitvijo na strežnik VPS

Ustvarjanje bota Discord na .NET Core z namestitvijo na strežnik VPS

Pozdravljeni Khabrovci!

Danes boste videli članek, ki vam bo pokazal, kako ustvariti bota z uporabo C# na .NET Core in kako ga zagnati na oddaljenem strežniku.

Članek bo sestavljen iz ozadja, pripravljalne faze, logike pisanja in prenosa bota na oddaljeni strežnik.

Upam, da bo ta članek pomagal mnogim začetnikom.

prazgodovina

Vse se je začelo eno neprespano jesensko noč, ki sem jo preživel na strežniku Discord. Ker sem se mu pred kratkim pridružil, sem ga začel študirati navzgor in navzdol. Ko sem našel besedilni kanal "Prosta delovna mesta", sem se začel zanimati, odprl sem ga in med ponudbami, ki me niso zanimale, sem našel naslednje:

"Programer (razvijalec botov)
Zahteve:

  • poznavanje programskih jezikov;
  • sposobnost za samoučenje.

Пожелания:

  • sposobnost razumevanja kode drugih ljudi;
  • poznavanje funkcionalnosti DISCORD.

Naloge:

  • razvoj botov;
  • podpora in vzdrževanje bota.

Vaša korist:

  • Priložnost podpore in vplivanja na projekt, ki vam je všeč;
  • Pridobivanje izkušenj dela v timu;
  • Priložnost za prikaz in izboljšanje obstoječih veščin.


To me je takoj zanimalo. Da, za to delo niso plačali, vendar od vas niso zahtevali nobenih obveznosti in v portfelju ne bo odveč. Zato sem pisal administratorju strežnika in prosil me je, naj napišem bota, ki bo prikazoval statistiko igralca v World of Tanks.

Pripravljalna faza

Ustvarjanje bota Discord na .NET Core z namestitvijo na strežnik VPS
Discrod
Preden začnemo pisati našega bota, ga moramo ustvariti za Discord. Potrebujete:

  1. Prijavite se v račun Discord по ссылке
  2. V zavihku "Aplikacije" kliknite gumb "Nova aplikacija" in poimenujte bota
  3. Pridobite žeton bota tako, da se prijavite v svojega bota in poiščete zavihek »Bot« na seznamu »Nastavitve«.
  4. Shranite žeton nekam

Wargaming

Prav tako morate ustvariti aplikacijo v Wargamingu, da dobite dostop do API-ja Wargaming. Tudi tukaj je vse preprosto:

  1. Prijavite se v svoj račun Wargaming po tej povezavi
  2. Gremo na "Moje aplikacije" in kliknemo na gumb "Dodaj novo aplikacijo", damo ime aplikacije in izberemo njeno vrsto
  3. Shranjevanje ID-ja aplikacije

Software

Obstaja že svoboda izbire. Nekdo uporablja Visual Studio, nekdo Rider, nekdo je na splošno močan in piše kodo v Vimu (navsezadnje pravi programerji uporabljajo samo tipkovnico, kajne?). Da pa ne bi implementirali Discord API, lahko uporabite neuradno knjižnico C# “DSharpPlus”. Namestite ga lahko iz NuGeta ali pa sami zgradite izvorne kode iz repozitorija.

Za tiste, ki ne znate ali ste pozabili namestiti aplikacije iz NuGet.Navodila za Visual Studio

  1. Pojdite na zavihek Projekt - Upravljanje paketov NuGet;
  2. Kliknite na pregled in v iskalno polje vnesite “DSharpPlus”;
  3. Izberite in namestite okvir;
  4. DOBIČEK!

Pripravljalna faza je končana, lahko nadaljujete s pisanjem bota.

Logika pisanja

Ustvarjanje bota Discord na .NET Core z namestitvijo na strežnik VPS

Ne bomo upoštevali celotne logike aplikacije, pokazal bom le, kako delati s prestrezanjem sporočil s strani bota in kako delati z API-jem Wargaming.

Delo z botom Discord poteka prek statične asinhrone naloge MainTask(string[] args);
Če želite poklicati to funkcijo, se morate registrirati v Main

MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();

Nato morate inicializirati svojega bota:

discord = new DiscordClient(new DiscordConfiguration
{
    Token = token,
    TokenType = TokenType.Bot,
    UseInternalLogHandler = true,
    LogLevel = LogLevel.Debug
});

Kjer je token žeton vašega bota.
Nato prek lambde zapišemo potrebne ukaze, ki naj jih bot izvede:

discord.MessageCreated += async e =>
{
    string message = e.Message.Content;
    if (message.StartsWith("&"))
    {
        await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
    }
};

Kjer e.Author.Username pridobi uporabnikov vzdevek.

Tako vas bo bot pozdravil, ko pošljete katero koli sporočilo, ki se začne z &.

Na koncu te funkcije morate napisati await discord.ConnectAsync(); in počakajte na Task.Delay(-1);

To vam bo omogočilo izvajanje ukazov v ozadju, ne da bi prevzeli glavno nit.

Zdaj se moramo ukvarjati z API-jem Wargaming. Tukaj je vse preprosto - napišite zahteve CURL, dobite odgovor v obliki niza JSON, od tam izvlecite potrebne podatke in z njimi izvajajte manipulacije.

Primer dela z WargamingAPI

public Player FindPlayer(string searchNickname)
        {
            //https://api.worldoftanks.ru/wot/account/list/?application_id=y0ur_a@@_id_h3r3search=nickname
            urlRequest = resourceMan.GetString("url_find_player") + appID + "&search=" + searchNickname;
            Player player = null;
            string resultResponse = GetResponse(urlRequest);
            dynamic parsed = JsonConvert.DeserializeObject(resultResponse);

            string status = parsed.status;
            if (status == "ok")
            {
                int count = parsed.meta.count;
                if (count > 0)
                {
                    player = new Player
                    {
                        Nickname = parsed.data[0].nickname,
                        Id = parsed.data[0].account_id
                    };
                }
                else
                {
                    throw new PlayerNotFound("Игрок не найден");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Минимум три символа требуется");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Неверный поиск");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Пустой никнейм");
                }
                else
                {
                    throw new Exception("Something went wrong.");
                }
            }

            return player;
        }

Pozor! Strogo ni priporočljivo shranjevati vseh žetonov in ID-jev aplikacij v čistem besedilu! Discord vsaj prepove takšne žetone, ko vstopijo v svetovno omrežje, največ pa bot začnejo uporabljati napadalci.

Namestitev na VPS - strežnik

Ustvarjanje bota Discord na .NET Core z namestitvijo na strežnik VPS

Ko končate z botom, ga morate gostiti na strežniku, ki nenehno deluje 24/7. To je posledica dejstva, da ko se vaša aplikacija izvaja, se izvaja tudi bot. Takoj, ko izklopite aplikacijo, tudi vaš bot zaspi.

Na tem svetu obstaja veliko strežnikov VPS, tako v sistemu Windows kot v sistemu Linux, vendar je v večini primerov veliko ceneje gostovati v sistemu Linux.

Na strežniku Discord so mi svetovali vscale.io in na njem sem takoj ustvaril virtualni strežnik na Ubuntuju in naložil bota. Ne bom opisoval, kako to spletno mesto deluje, ampak bom šel naravnost do nastavitev bota.

Najprej morate namestiti potrebno programsko opremo, ki bo poganjala našega bota, napisanega v .NET Core. Kako to storiti, je opisano tukaj.

Nato morate bota naložiti v storitev Git, kot je GitHub in podobno, in ga klonirati v strežnik VPS ali prenesti svojega bota na druge načine. Upoštevajte, da boste imeli samo konzolo, brez GUI. Nasploh.

Ko prenesete svojega bota, ga morate zagnati. Za to potrebujete:

  • Obnovi vse odvisnosti: obnovitev dotnet
  • Gradnja aplikacije: dotnet build name_project.sln -c Izdaja
  • Pojdite na zgrajen DLL;
  • dotnet ime_datoteke.dll

čestitke! Vaš bot deluje. Vendar pa bot na žalost zasede konzolo in ni enostavno zapustiti strežnika VPS. Tudi v primeru ponovnega zagona strežnika boste morali zagnati bota na nov način. Obstaja nekaj izhodov iz situacije. Vsi so povezani z zagonom ob zagonu strežnika:

  • Dodajte zagonski skript v /etc/init.d
  • Ustvarite storitev, ki se bo zagnala ob zagonu.

Ne vidim smisla, da bi se o njih podrobno ukvarjal, vse je dovolj podrobno opisano na internetu.

Ugotovitve

Vesel sem, da sem sprejel to nalogo. To je bila moja prva izkušnja z razvojem botov in vesel sem, da sem dobil novo znanje o C# in delu z Linuxom.

Povezava do strežnika Discord. Za tiste, ki igrajo igre Wargaming.
Povezava do repozitorija, kjer se nahaja bot Discord.
Povezava do repozitorija DSharpPlus.
Спасибо за внимание!

Vir: www.habr.com

Dodaj komentar