Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega

Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega

Tere Khabrovites!

Täna näete artiklit, mis näitab, kuidas luua .NET Core'is C#-ga robotit ja kuidas seda kaugserveris käivitada.

Artikkel koosneb taustast, ettevalmistavast etapist, loogika kirjutamisest ja roboti ülekandmisest kaugserverisse.

Loodan, et see artikkel aitab paljusid algajaid.

eelajalugu

Kõik sai alguse ühel unetul sügisööl, mille veetsin Discordi serveris. Kuna ma hiljuti temaga liitusin, hakkasin teda üles ja alla uurima. Olles leidnud tekstikanali "Vabad töökohad", hakkasin huvi tundma, avasin selle ja leidsin pakkumiste hulgast, mis mind ei huvitanud, järgmised:

"Programmeerija (roti arendaja)
nõuded:

  • programmeerimiskeelte tundmine;
  • iseõppimise võime.

Пожелания:

  • oskus mõista teiste inimeste koodi;
  • teadmised DISCORDi funktsionaalsusest.

Eesmärgid:

  • robotite arendamine;
  • boti tugi ja hooldus.

Teie eelised:

  • Võimalust toetada ja mõjutada endale meelepärast projekti;
  • Meeskonnas töötamise kogemuse omandamine;
  • Võimalus näidata ja täiendada olemasolevaid oskusi.


See huvitas mind kohe. Jah, nad ei maksnud selle töö eest, kuid nad ei nõudnud teilt mingeid kohustusi ja see ei lähe portfellis üleliigseks. Seetõttu kirjutasin serveri administraatorile ja ta palus mul kirjutada bot, mis näitab mängija statistikat World of Tanksis.

Ettevalmistav etapp

Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega
Discrod
Enne kui hakkame oma robotit kirjutama, peame selle Discordi jaoks looma. Sa vajad:

  1. Logige sisse Discordi kontole по ссылке
  2. Vahekaardil "Rakendused" klõpsake nuppu "Uus rakendus" ja nimetage robot
  3. Hankige boti tunnus, logides sisse oma robotisse ja leides loendist "Seaded" vahekaardi "Bot".
  4. Salvestage märk kuhugi

Wargaming

Samuti peate Wargamingu API-le juurdepääsu saamiseks looma rakenduse Wargaming. Ka siin on kõik lihtne:

  1. Logige sisse oma Wargamingu kontole selle lingi kaudu
  2. Me läheme jaotisse "Minu rakendused" ja klõpsake nuppu "Lisa uus rakendus", andes rakenduse nime ja valides selle tüübi.
  3. Rakenduse ID salvestamine

tarkvara

Valikuvabadus on juba olemas. Keegi kasutab Visual Studiot, keegi Riderit, keegi on üldiselt võimas ja kirjutab Vimis koodi (kasutavad ju tõelised programmeerijad ainult klaviatuuri, eks?). Kuid selleks, et mitte rakendada Discord API-d, võite kasutada mitteametlikku C# teeki "DSharpPlus". Saate selle installida kas NuGetist või koostades allikad ise hoidlast.

Neile, kes ei tea või on unustanud, kuidas NuGeti rakendusi installida.Visual Studio juhised

  1. Minge vahekaardile Projekt - halda NuGeti pakette;
  2. Klõpsake arvustusel ja sisestage otsinguväljale "DSharpPlus";
  3. Valige ja installige raamistik;
  4. KASUM!

Ettevalmistav etapp on läbi, võite jätkata roboti kirjutamist.

Kirjutamise loogika

Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega

Me ei võta arvesse kogu rakenduse loogikat, näitan ainult, kuidas töötada roboti sõnumite pealtkuulamisega ja kuidas töötada Wargaming API-ga.

Discordi robotiga töötamine toimub staatilise asünkroonimise kaudu. Task MainTask(string[] args);
Selle funktsiooni käivitamiseks peate registreerima Main

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

Järgmiseks peate oma roboti lähtestama.

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

Kus on teie boti tunnus.
Seejärel kirjutame lambda kaudu vajalikud käsud, mida robot peaks täitma:

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

Kust e.Author.Username saab kasutaja hüüdnime.

Nii tervitab robot teid, kui saadate mis tahes sõnumi, mis algab &-ga.

Selle funktsiooni lõppu tuleb kirjutada await discord.ConnectAsync(); ja oodake Task.Delay(-1);

See võimaldab teil käivitada taustal käske ilma põhilõimi võtmata.

Nüüd peame tegelema Wargaming API-ga. Siin on kõik lihtne – kirjutage CURL-i päringuid, hankige vastus JSON-stringina, tõmmake sealt välja vajalikud andmed ja tehke nendega manipuleerimisi.

WargamingAPI-ga töötamise näide

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;
        }

Tähelepanu! Kõiki märke ja rakenduste ID-sid ei ole rangelt soovitatav salvestada selge tekstina! Vähemalt keelab Discord sellised märgid, kui need sisenevad ülemaailmsesse võrku, ja maksimaalselt hakkavad ründajad robotit kasutama.

Juuruta VPS-i serverisse

Discordi roboti loomine .NET Core'is koos VPS-serverisse juurutamisega

Kui olete robotiga töötamise lõpetanud, tuleb see hostida serveris, mis töötab pidevalt ööpäevaringselt. See on tingitud asjaolust, et kui teie rakendus töötab, töötab ka robot. Niipea kui rakenduse välja lülitate, jääb ka teie bot magama.

Selles maailmas on palju VPS-servereid nii Windowsis kui ka Linuxis, kuid enamikul juhtudel on Linuxis hostimine palju odavam.

Discordi serveris soovitati mulle vscale.io ja ma lõin sellele kohe Ubuntu virtuaalserveri ja laadisin roboti üles. Ma ei kirjelda, kuidas see sait töötab, vaid lähen otse roboti seadete juurde.

Kõigepealt peate installima vajaliku tarkvara, mis käivitab meie .NET Core'is kirjutatud roboti. Kuidas seda teha, kirjeldatakse siin.

Järgmiseks peate roboti üles laadima Git-teenusesse, nagu GitHub jms, ning kloonima selle VPS-serverisse või laadima oma roboti muul viisil alla. Pange tähele, et teil on ainult konsool, ilma GUI-ta. Üleüldse.

Kui olete oma roboti alla laadinud, peate selle käivitama. Selleks vajate:

  • Taasta kõik sõltuvused: dotnet taastada
  • Rakenduse järg: dotnet build name_project.sln -c Väljalase
  • Minge ehitatud DLL-i;
  • punktvõrgu_faili_nimi.dll

Palju õnne! Teie robot töötab. Kahjuks hõivab bot aga konsooli ja VPS-serverist pole lihtne väljuda. Samuti peate serveri taaskäivitamise korral käivitama roboti uuel viisil. Olukorrast on paar väljapääsu. Kõik need on seotud käivitamisega serveri käivitamisel:

  • Lisa käivitamisskript faili /etc/init.d
  • Looge teenus, mis käivitub käivitamisel.

Ma ei näe mõtet nendel üksikasjalikult peatuda, Internetis on kõike piisavalt üksikasjalikult kirjeldatud.

Järeldused

Mul on hea meel, et võtsin selle ülesande vastu. See oli minu esimene robotite arendamise kogemus ja mul on hea meel, et sain uusi teadmisi C # ja Linuxiga töötamise kohta.

Link Discordi serveriga. Neile, kes mängivad Wargamingu mänge.
Link hoidlale, kus Discordi robot asub.
Link DSharpPlusi hoidlale.
Tänan teid tähelepanu eest!

Allikas: www.habr.com

Lisa kommentaar