Discord roboto kūrimas .NET Core su diegimu VPS serveryje

Discord roboto kūrimas .NET Core su diegimu VPS serveryje

Sveiki chabrovitai!

Šiandien pamatysite straipsnį, kuriame bus parodyta, kaip sukurti robotą naudojant C# .NET Core ir kaip jį paleisti nuotoliniame serveryje.

Straipsnį sudarys fonas, paruošiamasis etapas, logikos rašymas ir boto perkėlimas į nuotolinį serverį.

Tikiuosi, kad šis straipsnis padės daugeliui pradedančiųjų.

priešistorė

Viskas prasidėjo vieną bemiegę rudens naktį, kurią praleidau Discord serveryje. Kadangi neseniai prisijungiau prie jo, pradėjau jį tyrinėti aukštyn ir žemyn. Radęs tekstinį kanalą „Laisvos darbo vietos“ susidomėjau, atsidariau jį ir tarp manęs nedominančių pasiūlymų radau štai tokius:

"Programuotojas (botų kūrėjas)
reikalavimai:

  • programavimo kalbų išmanymas;
  • gebėjimas mokytis savarankiškai.

Пожелания:

  • gebėjimas suprasti kitų žmonių kodą;
  • DISCORD funkcionalumo išmanymas.

Užduotys:

  • botų kūrimas;
  • boto palaikymas ir priežiūra.

Jūsų nauda:

  • Galimybę palaikyti ir daryti įtaką jums patinkančiam projektui;
  • Įgyti patirties dirbant komandoje;
  • Galimybę pademonstruoti ir tobulinti turimus įgūdžius.


Tai mane iškart sudomino. Taip, jie nemokėjo už šį darbą, bet nereikalavo iš jūsų jokių įsipareigojimų ir portfelyje tai nebus nereikalinga. Todėl parašiau serverio administratoriui, o jis paprašė parašyti botą, kuris rodytų žaidėjo statistiką World of Tanks.

Parengiamasis etapas

Discord roboto kūrimas .NET Core su diegimu VPS serveryje
Discrod
Prieš pradėdami rašyti savo robotą, turime jį sukurti „Discord“. Tau reikia:

  1. Prisijunkite prie Discord paskyros по ссылке
  2. Skirtuke „Programos“ spustelėkite mygtuką „Nauja programa“ ir pavadinkite robotą
  3. Gaukite roboto prieigos raktą prisijungę prie savo roboto ir sąraše „Nustatymai“ surasdami skirtuką „Bot“
  4. Išsaugokite žetoną kur nors

Šildymas

Be to, norėdami gauti prieigą prie Wargaming API, turite sukurti programą „Wargaming“. Čia taip pat viskas paprasta:

  1. Prisijunkite prie savo Wargaming paskyros šioje nuorodoje
  2. Einame į „Mano programos“ ir spustelėkite mygtuką „Pridėti naują programą“, nurodydami programos pavadinimą ir pasirinkdami jos tipą.
  3. Išsaugomas programos ID

programinė įranga

Jau yra pasirinkimo laisvė. Kažkas naudoja Visual Studio, kažkas Rider, kažkas paprastai yra galingas ir rašo kodą Vim (juk tikri programuotojai naudoja tik klaviatūrą, tiesa?). Tačiau norėdami neįdiegti „Discord“ API, galite naudoti neoficialią C# biblioteką „DSharpPlus“. Jį galite įdiegti iš „NuGet“ arba patys kurdami šaltinius iš saugyklos.

Tiems, kurie nežino arba pamiršo, kaip įdiegti programas iš NuGet.„Visual Studio“ instrukcijos

  1. Eikite į skirtuką Projektas - Tvarkyti „NuGet“ paketus;
  2. Spustelėkite apžvalgą ir paieškos laukelyje įveskite „DSharpPlus“;
  3. Pasirinkti ir įdiegti karkasą;
  4. Pelnas!

Parengiamasis etapas baigėsi, galite pereiti prie roboto rašymo.

Rašymo logika

Discord roboto kūrimas .NET Core su diegimu VPS serveryje

Mes nenagrinėsime visos programos logikos, aš tik parodysiu, kaip dirbti su žinučių perėmimu botu ir kaip dirbti su Wargaming API.

Darbas su „Discord“ botu vyksta naudojant statinį asinchronizavimą Task MainTask(string[] args);
Norėdami iškviesti šią funkciją, pagrindiniame puslapyje turite užsiregistruoti

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

Tada turite inicijuoti savo robotą:

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

Kur yra jūsų roboto prieigos raktas.
Tada per lambda parašome reikiamas komandas, kurias robotas turėtų vykdyti:

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

Kur e.Author.Username gauna vartotojo slapyvardį.

Tokiu būdu, kai siunčiate bet kokį pranešimą, prasidedantį &, robotas jus pasveikins.

Šios funkcijos pabaigoje turite parašyti await discord.ConnectAsync(); ir laukti Task.Delay(-1);

Tai leis jums vykdyti komandas fone, neužimant pagrindinės gijos.

Dabar turime susidoroti su Wargaming API. Čia viskas paprasta – parašykite CURL užklausas, gaukite atsakymą JSON eilutės forma, ištraukite iš ten reikiamus duomenis ir atlikite jais manipuliacijas.

Darbo su WargamingAPI pavyzdys

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

Dėmesio! Griežtai nerekomenduojama visų žetonų ir programų ID saugoti aiškiu tekstu! Mažiausiai „Discord“ uždraudžia tokius žetonus, kai jie patenka į pasaulinį tinklą, o maksimaliai – robotą pradeda naudoti užpuolikai.

Įdiegti į VPS – serverį

Discord roboto kūrimas .NET Core su diegimu VPS serveryje

Baigę naudoti robotą, jis turi būti talpinamas serveryje, kuris nuolat veikia 24 valandas per parą, 7 dienas per savaitę. Taip yra dėl to, kad kai veikia jūsų programa, veikia ir robotas. Kai tik išjungiate programą, jūsų robotas taip pat užmiega.

Šiame pasaulyje yra daug VPS serverių, tiek sistemoje „Windows“, tiek „Linux“, tačiau daugeliu atvejų juos laikyti „Linux“ yra daug pigiau.

Discord serveryje man patarė vscale.io ir aš iš karto sukūriau virtualų serverį Ubuntu ir įkėliau robotą. Neapibūdinsiu, kaip ši svetainė veikia, bet eisiu tiesiai į boto nustatymus.

Pirmiausia turite įdiegti reikiamą programinę įrangą, kuri paleis mūsų robotą, parašytą .NET Core. Kaip tai padaryti, aprašyta čia.

Tada turite įkelti robotą į „Git“ paslaugą, pvz., „GitHub“ ir panašiai, ir klonuoti jį į VPS serverį arba atsisiųsti robotą kitais būdais. Atminkite, kad turėsite tik konsolę, be GUI. Iš viso.

Atsisiuntę robotą, turite jį paleisti. Tam jums reikia:

  • Atkurti visas priklausomybes: dotnet atkūrimas
  • Sukurti programą: dotnet build name_project.sln -c leidimas
  • Eikite į pastatytą DLL;
  • taškinio tinklo_failo_pavadinimas.dll

Sveikiname! Jūsų robotas veikia. Tačiau, deja, robotas užima konsolę ir nėra lengva išeiti iš VPS serverio. Be to, jei serveris bus paleistas iš naujo, robotą turėsite paleisti nauju būdu. Yra keletas išeičių iš padėties. Visi jie yra susiję su paleidimu paleidžiant serverį:

  • Pridėkite vykdymo scenarijų į /etc/init.d
  • Sukurkite paslaugą, kuri veiks paleidžiant.

Nematau prasmės prie jų detaliai pasilikti, viskas pakankamai išsamiai aprašyta internete.

išvados

Džiaugiuosi, kad ėmiau šios užduoties. Tai buvo mano pirmoji robotų kūrimo patirtis ir džiaugiuosi, kad įgijau naujų žinių apie C # ir darbą su Linux.

Nuoroda į Discord serverį. Tiems, kurie žaidžia Wargaming žaidimus.
Nuoroda į saugyklą, kurioje yra „Discord“ robotas.
Nuoroda į DSharpPlus saugyklą.
Dėkojame už dėmesį!

Šaltinis: www.habr.com

Добавить комментарий