Erstellt en Discord Bot op .NET Core mat Deployment op e VPS Server

Erstellt en Discord Bot op .NET Core mat Deployment op e VPS Server

Moien Khabrovites!

Haut gesitt Dir en Artikel deen Iech weist wéi Dir e Bot erstellt mat C # op .NET Core a wéi Dir et op engem Fernserver leeft.

Den Artikel besteet aus engem Hannergrond, enger Virbereedungsstadium, Schreiflogik an Transfert vum Bot op e Fernserver.

Ech hoffen dësen Artikel hëlleft vill Ufänger.

Virgeschicht

Et huet alles ugefaang op enger schlofloser Hierschtnuecht déi ech um Discord Server verbruecht hunn. Zënter datt ech viru kuerzem bei him komm sinn, hunn ech ugefaang hien op an erof ze studéieren. Nodeems ech den Textkanal "Vacances" fonnt hunn, hunn ech mech interesséiert, en opgemaach, a fonnt ënnert den Offeren déi mech net interesséieren, dës sinn:

"Programmer (Bot Entwéckler)
Ufuerderunge:

  • Wëssen vun programméiere Sproochen;
  • Fäegkeet fir Selbstléieren.

Wënsch:

  • Fäegkeet fir de Code vun anere Leit ze verstoen;
  • Wëssen iwwer DISCORD Funktionalitéit.

Aufgaben:

  • Bot Entwécklung;
  • Ënnerstëtzung an Ënnerhalt vum Bot.

Äre Virdeel:

  • Geleeënheet fir de Projet deen Dir gären z'ënnerstëtzen an ze beaflossen;
  • Erfarung sammelen fir an engem Team ze schaffen;
  • Geleeënheet fir existent Fäegkeeten ze demonstréieren an ze verbesseren.


Dëst huet mech direkt interesséiert. Jo, si hunn net fir dës Aarbecht bezuelt, awer si hu keng Obligatiounen vun Iech gefuerdert, an et wäert net iwwerflësseg am Portfolio sinn. Dofir hunn ech dem Server Admin geschriwwen, an hien huet mech gefrot e Bot ze schreiwen deen d'Statistike vum Spiller an World of Tanks weist.

Preparatory Stadium

Erstellt en Discord Bot op .NET Core mat Deployment op e VPS Server
Discrod
Ier mir ufänken eise Bot ze schreiwen, musse mir et fir Discord erstellen. Du brauchs:

  1. Login op Discord Kont Link
  2. An der Tab "Applikatiounen", klickt op de "Neie Applikatioun" Knäppchen a nennt de Bot
  3. Kritt e Bot Token andeems Dir Iech an Äre Bot aloggen an de Tab "Bot" an der "Astellungen" Lëscht fannen
  4. Späichert den Token iergendwou

wargaming

Och musst Dir eng Applikatioun am Wargaming erstellen fir Zougang zu der Wargaming API ze kréien. Och hei ass alles einfach:

  1. Login op Äre Wargaming Kont vun dësem Link
  2. Mir ginn op "Meng Uwendungen" a klickt op de "Füügt eng nei Applikatioun" Knäppchen, gitt den Numm vun der Applikatioun a wielt säin Typ
  3. Späichert d'Applikatioun ID

Software

Et gëtt scho Wahlfräiheet. Een benotzt Visual Studio, een Rider, een ass allgemeng mächteg, a schreift Code am Vim (schliisslech benotze richteg Programméierer nëmmen d'Tastatur, richteg?). Wéi och ëmmer, fir d'Discord API net ëmzesetzen, kënnt Dir déi inoffiziell C # Bibliothéik "DSharpPlus" benotzen. Et kann entweder vun NuGet installéiert ginn, oder andeems Dir d'Quellen aus dem Repository selwer baut.

Fir déi, déi net wëssen oder vergiess hunn wéi d'Applikatioune vun NuGet installéiert ginn.Instruktioune fir Visual Studio

  1. Gitt op de Tab Project - Manage NuGet Packages;
  2. Klickt op d'Iwwerpréiwung an am Sichfeld gitt "DSharpPlus";
  3. Wielt an installéiert Kader;
  4. PROFIT!

D'Virbereedungsstadium ass eriwwer, Dir kënnt weidergoen fir de Bot ze schreiwen.

Schreiwen Logik

Erstellt en Discord Bot op .NET Core mat Deployment op e VPS Server

Mir wäerten d'ganz Logik vun der Applikatioun net berücksichtegen, ech wäert nëmme weisen wéi een mat der Offange vu Messagen vum Bot funktionnéiert a wéi een mat der Wargaming API schafft.

Schafft mam Discord Bot geschitt duerch d'statesch async Task MainTask (String [] args);
Fir dës Funktioun ze ruffen, musst Dir am Main aschreiwen

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

Als nächst musst Dir Äre Bot initialiséieren:

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

Wou Token ass den Token vun Ärem Bot.
Dann, duerch d'Lambda, schreiwen mir déi néideg Kommandoen, déi de Bot ausféiere soll:

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

Wou e.Author.Username de Benotzer säi Spëtznumm kritt.

Op dës Manéier, wann Dir e Message schéckt, deen mat & ufänkt, wäert de Bot Iech begréissen.

Um Enn vun dëser Funktioun, Dir musst schreiwen wait discord.ConnectAsync (); an waarden op Aufgab.Delay (-1);

Dëst erlaabt Iech Kommandoen am Hannergrond auszeféieren ouni den Haaptthread opzehuelen.

Elo musse mir mat der Wargaming API këmmeren. Alles ass einfach hei - schreift CURL Ufroen, kritt eng Äntwert a Form vun engem JSON String, zitt déi néideg Donnéeën vun do eraus a maacht Manipulatiounen op hinnen.

E Beispill fir mat WargamingAPI ze schaffen

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

Opgepasst! Et ass strikt net recommandéiert all Tokens an Applikatioun IDen am Kloertext ze späicheren! Op e Minimum verbitt Discord esou Tokens wann se an de weltwäiten Netzwierk erakommen, a maximal fänkt de Bot vun Ugräifer ze benotzen.

Deploy op VPS - Server

Erstellt en Discord Bot op .NET Core mat Deployment op e VPS Server

Wann Dir mam Bot fäerdeg sidd, muss et op engem Server gehost ginn deen dauernd 24/7 leeft. Dëst ass wéinst der Tatsaach datt wann Är Applikatioun leeft, de Bot och leeft. Soubal Dir d'Applikatioun ausschalt, schléift Äre Bot och.

Vill VPS Server existéieren op dëser Welt, souwuel op Windows wéi och op Linux, awer an de meeschte Fäll ass et vill méi bëlleg fir op Linux ze hosten.

Um Discord-Server gouf ech ugeroden vscale.io, an ech hunn direkt e virtuelle Server op Ubuntu drop erstallt an de Bot eropgelueden. Ech wäert net beschreiwen wéi dëse Site funktionnéiert, awer wäert direkt an d'Botastellungen goen.

Als éischt musst Dir déi néideg Software installéieren déi eise Bot an .NET Core geschriwwe gëtt. Wéi et ze maachen ass hei beschriwwen.

Als nächst musst Dir de Bot op e Git Service eropluede, wéi GitHub an dergläiche, an et op e VPS Server klonen, oder Äre Bot op aner Manéier eroflueden. Maacht weg datt Dir nëmmen eng Konsol hutt, et gëtt keng GUI. Iwwerhaapt.

Nodeems Dir Äre Bot erofgelueden hutt, musst Dir et lafen. Fir dëst braucht Dir:

  • Restauréieren all Ofhängegkeeten: Dotnet Restauréieren
  • Build Applikatioun: dotnet bauen name_project.sln -c Verëffentlechung
  • Gitt op gebaut DLL;
  • dotnet name_of_file.dll

Gratulatioun! Äre Bot leeft. Wéi och ëmmer, de Bot, leider, besetzt d'Konsole, an et ass net einfach de VPS Server ze verloossen. Och, am Fall vun engem Server Neistart, musst Dir de Bot op eng nei Manéier starten. Et ginn e puer Weeër aus der Situatioun. All si sinn am Zesummenhang mam Start beim Serverstart:

  • Füügt Run-Skript op /etc/init.d
  • Erstellt e Service deen beim Startup leeft.

Ech gesinn net de Punkt fir se am Detail ze wunnen, alles ass am Detail am Internet am Detail beschriwwen.

Conclusiounen

Ech si frou, datt ech dës Aufgab ugeholl hunn. Dëst war meng éischt Bot Entwécklung Erfahrung, an ech frou, datt ech nei Wëssen an C krut #, a schaffen mat Linux.

Link op Discord Server. Fir déi, déi Wargaming Spiller spillen.
Link op de Repository wou den Discord Bot läit.
Link zum DSharpPlus Repository.
Merci fir Är Opmierksamkeet!

Source: will.com

Setzt e Commentaire