Creació d'un bot de Discord a .NET Core amb desplegament a un servidor VPS

Creació d'un bot de Discord a .NET Core amb desplegament a un servidor VPS

Hola, habitants de Khabrovsk!

Avui llegireu un article que us explicarà com crear un bot amb C# a .NET Core i com executar-lo en un servidor remot.

L'article consistirà en antecedents, fase preparatòria, escriptura de lògica i transferència del bot a un servidor remot.

Espero que aquest article ajudi a molts principiants.

prehistòria

Tot va començar una nit de tardor sense dormir, que vaig passar al servidor de Discord. Com que m'hi vaig incorporar fa relativament poc, vaig començar a estudiar-lo per dins i per fora. Després d'haver descobert el canal de text "Vacants", em vaig interessar, el vaig obrir i vaig trobar entre les ofertes que no m'interessaven, aquesta:

"Programador (desenvolupador de bot)
Requisits:

  • coneixement de llenguatges de programació;
  • capacitat d'autoaprenentatge.

Пожелания:

  • capacitat d'entendre el codi d'altres persones;
  • coneixement de la funcionalitat DISCORD.

Objectius:

  • desenvolupament de bots;
  • suport i manteniment del bot.

El teu benefici:

  • L'oportunitat de donar suport i influir en el projecte que t'agrada;
  • Adquirir experiència treballant en equip;
  • Oportunitat de demostrar i millorar les habilitats existents.”


Això va despertar el meu interès a l'instant. Sí, no van pagar per aquesta feina, però no us van exigir cap obligació, i no serà superflu a la vostra cartera. Així que vaig escriure a l'administrador del servidor i em va demanar que escrivís un bot que mostrés les estadístiques dels jugadors a World of Tanks.

La fase preparatòria

Creació d'un bot de Discord a .NET Core amb desplegament a un servidor VPS
Discrod
Abans de començar a escriure el nostre bot, hem de crear-lo per a Discord. Necessites:

  1. Inicieu sessió al compte de Discord по ссылке
  2. A la pestanya "Aplicacions", feu clic al botó "Nova aplicació" i anomeneu el bot
  3. Obteniu un testimoni de bot iniciant sessió al vostre bot i cercant la pestanya "Bot" a la llista "Configuració"
  4. Guarda el testimoni en algun lloc

jocs de guerra

A més, heu de crear una aplicació a Wargaming per accedir a l'API de Wargaming. Aquí també tot és senzill:

  1. Inicieu sessió al vostre compte de Wargaming mitjançant aquest enllaç
  2. Aneu a "Les meves aplicacions" i feu clic al botó "Afegeix una aplicació nova", donant el nom de l'aplicació i seleccionant-ne el tipus.
  3. Desant l'ID de l'aplicació

Software

Ja hi ha llibertat d'elecció. Alguns utilitzen Visual Studio, alguns Rider, alguns són generalment potents i escriuen codi a Vim (després de tot, els programadors reals només utilitzen el teclat, oi?). Tanmateix, per evitar la implementació de l'API de Discord, podeu utilitzar la biblioteca C# no oficial "DSharpPlus". Podeu instal·lar-lo des de NuGet o recopilant les fonts des del dipòsit.

Per a aquells que no saben o han oblidat com instal·lar aplicacions de NuGet.Instruccions per a Visual Studio

  1. Aneu a la pestanya Projecte - Gestioneu paquets NuGet;
  2. Feu clic a revisió i introduïu "DSharpPlus" al camp de cerca;
  3. Seleccioneu i instal·leu el marc;
  4. BENEFICI!

L'etapa preparatòria ha acabat, podeu passar a escriure un bot.

Lògica d'escriptura

Creació d'un bot de Discord a .NET Core amb desplegament a un servidor VPS

No mirarem tota la lògica de l'aplicació; només us mostraré com treballar amb la intercepció de missatges amb bots i com treballar amb l'API de Wargaming.

El treball amb el bot Discord es produeix mitjançant la Tasca MainTask async estàtica (string[] args);
Per cridar aquesta funció, a Main cal escriure

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

A continuació, heu d'inicialitzar el vostre bot:

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

On el testimoni és el testimoni del vostre bot.
A continuació, utilitzant una lambda, escrivim les ordres necessàries que el bot hauria d'executar:

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

On e.Author.Username: obtenir el sobrenom de l'usuari.

D'aquesta manera, quan envieu qualsevol missatge que comenci per &, el bot us saludarà.

Al final d'aquesta funció, heu d'escriure await discord.ConnectAsync(); i espereu Task.Delay(-1);

Això permetrà executar ordres en segon pla sense ocupar el fil principal.

Ara heu d'entendre l'API de Wargaming. Aquí tot és senzill: escriviu sol·licituds CURL, rebeu una resposta en forma de cadena JSON, extreu les dades necessàries d'allà i manipuleu-les.

Un exemple de treball amb 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;
        }

Atenció! Es recomana estrictament no emmagatzemar tots els testimonis i identificadors d'aplicació en text clar! Com a mínim, Discord prohibeix aquestes fitxes quan entren a la World Wide Web; com a màxim, els atacants comença a utilitzar el bot.

Desplegueu al servidor VPS

Creació d'un bot de Discord a .NET Core amb desplegament a un servidor VPS

Un cop hàgiu acabat amb el bot, cal que estigui allotjat en un servidor que s'executi constantment les 24 hores del dia. Això es deu al fet que quan la vostra aplicació s'està executant, el bot també s'està executant. Tan bon punt desactiveu l'aplicació, el vostre bot entra a dormir.

Hi ha molts servidors VPS en aquest món, tant a Windows com a Linux, però en la majoria dels casos, és molt més barat allotjar a Linux.

Al servidor de Discord em van recomanar vscale.io i de seguida vaig crear-hi un servidor virtual a Ubuntu i vaig penjar el bot. No descriuré com funciona aquest lloc, però immediatament passaré a configurar el bot.

En primer lloc, cal instal·lar el programari necessari que executarà el nostre bot, escrit en .NET Core. Com fer-ho es descriu aquí.

A continuació, heu de carregar el bot a Git (un servei com GitHub i similars) i clonar-lo a un servidor VPS o, d'altres maneres, descarregar el vostre bot. Tingueu en compte que només tindreu una consola, sense GUI. En absolut.

Després d'haver baixat el bot, cal que l'inicieu. Per fer-ho, necessiteu:

  • Restaura totes les dependències: restauració de dotnet
  • Creeu l'aplicació: dotnet build name_project.sln -c Release
  • Aneu a la DLL construïda;
  • dotnet nom_del_fitxer.dll

Felicitats! El vostre bot s'està executant. Tanmateix, el bot, malauradament, ocupa la consola i deixar el servidor VPS no és tan fàcil. A més, si es reinicia el servidor, haureu de tornar a iniciar el bot. Hi ha un parell de maneres de sortir de la situació. Tots ells estan relacionats amb el llançament a l'inici del servidor:

  • Afegiu el llançament de l'script a /etc/init.d
  • Creeu un servei que s'iniciarà a l'inici.

No veig cap sentit a parlar-ne amb detall; tot es descriu amb prou detall a Internet.

Troballes

M'alegro d'haver assumit aquesta tasca. Aquesta va ser la meva primera experiència desenvolupant un bot, i estic content d'haver adquirit nous coneixements en C# i treballar amb Linux.

Enllaç al servidor de Discord. Per a aquells que juguen a Wargaming.
Enllaç al dipòsit on es troba el bot Discord.
Enllaç al dipòsit de DSharpPlus.
Gràcies!

Font: www.habr.com

Afegeix comentari