Een Discord-bot maken op .NET Core met implementatie op een VPS-server

Een Discord-bot maken op .NET Core met implementatie op een VPS-server

Hallo Chabrovieten!

Vandaag ziet u een artikel dat u laat zien hoe u een bot kunt maken met C# op .NET Core en hoe u deze op een externe server kunt uitvoeren.

Het artikel zal bestaan ​​uit een achtergrond, een voorbereidende fase, het schrijven van logica en het overbrengen van de bot naar een externe server.

Ik hoop dat dit artikel veel beginners zal helpen.

prehistorie

Het begon allemaal op een slapeloze herfstnacht die ik op de Discord-server doorbracht. Sinds ik me onlangs bij hem heb gevoegd, begon ik hem van top tot teen te bestuderen. Nadat ik het tekstkanaal "Vacatures" had gevonden, raakte ik geïnteresseerd, opende het en vond onder de aanbiedingen die me niet interesseerden, deze zijn:

"Programmer (botontwikkelaar)
vereisten:

  • kennis van programmeertalen;
  • vermogen tot zelflerend vermogen.

Пожелания:

  • vermogen om andermans code te begrijpen;
  • kennis van de DISCORD-functionaliteit.

doelstellingen:

  • bot-ontwikkeling;
  • ondersteuning en onderhoud van de bot.

Uw voordeel:

  • Mogelijkheid om het project dat u leuk vindt te ondersteunen en te beïnvloeden;
  • Ervaring opdoen met werken in een team;
  • Mogelijkheid om bestaande vaardigheden te demonstreren en te verbeteren.


Dit interesseerde me meteen. Ja, ze hebben niet voor dit werk betaald, maar ze hebben geen verplichtingen van u geëist en het zal niet overbodig zijn in de portefeuille. Daarom schreef ik naar de serverbeheerder en hij vroeg me om een ​​bot te schrijven die de spelersstatistieken in World of Tanks zal tonen.

De voorbereidende fase

Een Discord-bot maken op .NET Core met implementatie op een VPS-server
schijf
Voordat we beginnen met het schrijven van onze bot, moeten we deze voor Discord maken. Jij hebt nodig:

  1. Log in op Discord-account link
  2. Klik op het tabblad "Toepassingen" op de knop "Nieuwe toepassing" en geef de bot een naam
  3. Ontvang een bot-token door in te loggen op uw bot en het tabblad "Bot" te zoeken in de lijst "Instellingen".
  4. Bewaar het token ergens

wargaming

Je moet ook een applicatie maken in Wargaming om toegang te krijgen tot de Wargaming API. Ook hier is alles eenvoudig:

  1. Log in op uw Wargaming-account via deze link
  2. We gaan naar "Mijn applicaties" en klikken op de knop "Een nieuwe applicatie toevoegen", waarbij we de naam van de applicatie opgeven en het type selecteren
  3. De applicatie-ID opslaan

Software

Er is al keuzevrijheid. Iemand gebruikt Visual Studio, iemand Rider, iemand is over het algemeen krachtig en schrijft code in Vim (echte programmeurs gebruiken tenslotte alleen het toetsenbord, toch?). Om de Discord API echter niet te implementeren, kunt u de niet-officiële C#-bibliotheek "DSharpPlus" gebruiken. U kunt het vanuit NuGet installeren of door de bronnen zelf vanuit de repository te bouwen.

Voor degenen die niet weten of zijn vergeten hoe ze applicaties van NuGet moeten installeren.Instructies voor Visual Studio

  1. Ga naar het tabblad Project - NuGet-pakketten beheren;
  2. Klik op de recensie en voer in het zoekveld "DSharpPlus" in;
  3. Kader selecteren en installeren;
  4. WINST!

De voorbereidende fase is voorbij, u kunt doorgaan met het schrijven van de bot.

Logica schrijven

Een Discord-bot maken op .NET Core met implementatie op een VPS-server

We gaan niet in op de hele logica van de applicatie, ik laat alleen zien hoe te werken met het onderscheppen van berichten door de bot, en hoe te werken met de Wargaming API.

Werken met de Discord-bot gebeurt via de statische asynchrone taak MainTask(string[] args);
Om deze functie aan te roepen, moet u zich in Main registreren

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

Vervolgens moet u uw bot initialiseren:

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

Waar token het token van uw bot is.
Vervolgens schrijven we via de lambda de nodige commando's die de bot moet uitvoeren:

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

Waar e.Author.Username de bijnaam van de gebruiker krijgt.

Op deze manier zal de bot u begroeten wanneer u een bericht verzendt dat begint met &.

Aan het einde van deze functie moet u wachten op discord.ConnectAsync(); en wacht op Task.Delay(-1);

Hierdoor kun je op de achtergrond opdrachten uitvoeren zonder de rode draad op te pakken.

Nu moeten we omgaan met de Wargaming API. Alles is hier eenvoudig - schrijf CURL-verzoeken, ontvang een antwoord in de vorm van een JSON-string, haal de benodigde gegevens eruit en voer er manipulaties op uit.

Een voorbeeld van werken met 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;
        }

Aandacht! Het wordt ten strengste afgeraden om alle tokens en applicatie-ID's in leesbare tekst op te slaan! Discord verbiedt dergelijke tokens op zijn minst wanneer ze het wereldwijde netwerk binnenkomen, en maximaal begint de bot te worden gebruikt door aanvallers.

Implementeer naar VPS - server

Een Discord-bot maken op .NET Core met implementatie op een VPS-server

Zodra u klaar bent met de bot, moet deze worden gehost op een server die constant 24/7 draait. Dit is te wijten aan het feit dat wanneer uw applicatie draait, de bot ook draait. Zodra je de applicatie uitschakelt, valt ook je bot in slaap.

Er zijn veel VPS-servers in deze wereld, zowel op Windows als op Linux, maar in de meeste gevallen is het veel goedkoper om op Linux te hosten.

Op de Discord-server kreeg ik het advies vscale.io, en ik heb er meteen een virtuele server op Ubuntu op gemaakt en de bot geüpload. Ik zal niet beschrijven hoe deze site werkt, maar ga direct naar de bot-instellingen.

Allereerst moet u de benodigde software installeren die onze bot geschreven in .NET Core zal uitvoeren. Hoe je dat doet staat hier beschreven.

Vervolgens moet je de bot uploaden naar een Git-service, zoals GitHub en dergelijke, en deze klonen naar een VPS-server, of je bot op andere manieren downloaden. Houd er rekening mee dat u alleen een console heeft, geen GUI. Helemaal niet.

Nadat u uw bot hebt gedownload, moet u deze uitvoeren. Hiervoor heb je nodig:

  • Herstel alle afhankelijkheden: dotnet-herstel
  • Bouw applicatie: dotnet build name_project.sln -c Release
  • Ga naar ingebouwde DLL;
  • dotnet naam_van_bestand.dll

Gefeliciteerd! Je bot is actief. De bot neemt echter helaas de console in beslag en het is niet eenvoudig om de VPS-server te verlaten. Ook in het geval van een herstart van de server, moet u de bot op een nieuwe manier starten. Er zijn een aantal manieren om uit de situatie te komen. Ze zijn allemaal gerelateerd aan de lancering bij het opstarten van de server:

  • Voeg run-script toe aan /etc/init.d
  • Maak een service die wordt uitgevoerd bij het opstarten.

Ik zie het nut er niet van in om daar uitgebreid op in te gaan, op internet staat alles voldoende gedetailleerd beschreven.

Bevindingen

Ik ben blij dat ik deze opdracht heb aangenomen. Dit was mijn eerste ervaring met het ontwikkelen van bots, en ik ben blij dat ik nieuwe kennis heb opgedaan in C# en werken met Linux.

Link naar Discord-server. Voor degenen die Wargaming-spellen spelen.
Link naar de repository waar de Discord-bot zich bevindt.
Link naar de DSharpPlus-repository.
Dank je wel!

Bron: www.habr.com

Voeg een reactie