Création d'un bot Discord sur .NET Core avec déploiement sur un serveur VPS

Création d'un bot Discord sur .NET Core avec déploiement sur un serveur VPS

Salut les Khabrovites !

Aujourd'hui, vous verrez un article qui vous montrera comment créer un bot en utilisant C # sur .NET Core et comment l'exécuter sur un serveur distant.

L'article consistera en un arrière-plan, une étape préparatoire, l'écriture de la logique et le transfert du bot vers un serveur distant.

J'espère que cet article aidera de nombreux débutants.

Préhistoire

Tout a commencé lors d'une nuit d'automne sans sommeil que j'ai passée sur le serveur Discord. Depuis que je l'ai rejoint récemment, j'ai commencé à l'étudier de fond en comble. Après avoir trouvé la chaîne de texte "Vacancies", je me suis intéressée, je l'ai ouverte et j'ai trouvé parmi les offres qui ne m'intéressaient pas, celles-ci sont :

"Programmeur (développeur de bot)
Exigences:

  • connaissance des langages de programmation;
  • capacité d'auto-apprentissage.

Пожелания:

  • capacité à comprendre le code des autres;
  • connaissance de la fonctionnalité DISCORD.

Objectifs:

  • développement de robots ;
  • support et maintenance du bot.

Votre avantage :

  • Possibilité de soutenir et d'influencer le projet que vous aimez;
  • Acquérir une expérience de travail en équipe;
  • Possibilité de démontrer et d'améliorer les compétences existantes.


Cela m'a tout de suite intéressé. Oui, ils n'ont pas payé pour ce travail, mais ils n'ont exigé aucune obligation de votre part, et ce ne sera pas superflu dans le portefeuille. Par conséquent, j'ai écrit à l'administrateur du serveur, et il m'a demandé d'écrire un bot qui affichera les statistiques du joueur dans World of Tanks.

Phase préparatoire

Création d'un bot Discord sur .NET Core avec déploiement sur un serveur VPS
Discroder
Avant de commencer à écrire notre bot, nous devons le créer pour Discord. Vous avez besoin:

  1. Connectez-vous au compte Discord lien
  2. Dans l'onglet "Applications", cliquez sur le bouton "Nouvelle application" et nommez le bot
  3. Obtenez un jeton de bot en vous connectant à votre bot et en trouvant l'onglet "Bot" dans la liste "Paramètres"
  4. Enregistrez le jeton quelque part

Wargaming

De plus, vous devez créer une application dans Wargaming pour accéder à l'API Wargaming. Ici aussi, tout est simple :

  1. Connectez-vous à votre compte Wargaming par ce lien
  2. Nous allons dans "Mes applications" et cliquons sur le bouton "Ajouter une nouvelle application", en donnant le nom de l'application et en sélectionnant son type
  3. Enregistrement de l'ID de l'application

Logiciels

Il y a déjà la liberté de choix. Quelqu'un utilise Visual Studio, quelqu'un Rider, quelqu'un est généralement puissant, et écrit du code dans Vim (après tout, les vrais programmeurs n'utilisent que le clavier, non ?). Cependant, afin de ne pas implémenter l'API Discord, vous pouvez utiliser la bibliothèque C# non officielle "DSharpPlus". Vous pouvez l'installer soit à partir de NuGet, soit en créant vous-même les sources à partir du référentiel.

Pour ceux qui ne savent pas ou ont oublié comment installer des applications depuis NuGet.Instructions pour Visual Studio

  1. Accédez à l'onglet Projet - Gérer les packages NuGet ;
  2. Cliquez sur la revue et dans le champ de recherche entrez « DSharpPlus » ;
  3. Sélectionnez et installez le framework ;
  4. PROFIT!

La phase préparatoire est terminée, vous pouvez passer à l'écriture du bot.

Logique d'écriture

Création d'un bot Discord sur .NET Core avec déploiement sur un serveur VPS

Nous n'examinerons pas toute la logique de l'application, je montrerai seulement comment travailler avec l'interception des messages par le bot, et comment travailler avec l'API Wargaming.

Travailler avec le bot Discord passe par la tâche asynchrone statique MainTask(string[] args);
Pour appeler cette fonction, dans Main vous devez vous inscrire

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

Ensuite, vous devez initialiser votre bot :

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

Où jeton est le jeton de votre bot.
Ensuite, via le lambda, nous écrivons les commandes nécessaires que le bot doit exécuter :

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

Où e.Author.Username obtient le surnom de l'utilisateur.

De cette façon, lorsque vous envoyez un message commençant par &, le bot vous accueillera.

A la fin de cette fonction, vous devez écrire await discord.ConnectAsync(); et attendez Task.Delay(-1);

Cela vous permettra d'exécuter des commandes en arrière-plan sans prendre le fil principal.

Nous devons maintenant nous occuper de l'API Wargaming. Tout est simple ici - écrivez des requêtes CURL, obtenez une réponse sous la forme d'une chaîne JSON, extrayez les données nécessaires à partir de là et effectuez des manipulations dessus.

Un exemple de travail avec 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;
        }

Attention! Il est strictement déconseillé de stocker tous les jetons et ID d'application en texte clair ! Au minimum, Discord interdit ces jetons lorsqu'ils entrent dans le réseau mondial, et au maximum, le bot commence à être utilisé par les attaquants.

Déployer sur VPS - serveur

Création d'un bot Discord sur .NET Core avec déploiement sur un serveur VPS

Une fois que vous avez terminé avec le bot, il doit être hébergé sur un serveur qui fonctionne en permanence 24h/7 et XNUMXj/XNUMX. Cela est dû au fait que lorsque votre application est en cours d'exécution, le bot est également en cours d'exécution. Dès que vous éteignez l'application, votre bot s'endort également.

De nombreux serveurs VPS existent dans ce monde, à la fois sur Windows et sur Linux, cependant, dans la plupart des cas, il est beaucoup moins cher d'héberger sur Linux.

Sur le serveur Discord, on m'a conseillé vscale.io, et j'ai immédiatement créé un serveur virtuel sur Ubuntu dessus et téléchargé le bot. Je ne décrirai pas le fonctionnement de ce site, mais j'irai directement aux paramètres du bot.

Tout d'abord, vous devez installer le logiciel nécessaire qui exécutera notre bot écrit en .NET Core. Comment le faire est décrit ici.

Ensuite, vous devez télécharger le bot sur un service Git, comme GitHub et autres, et le cloner sur un serveur VPS, ou télécharger votre bot d'une autre manière. Veuillez noter que vous n'aurez qu'une console, pas d'interface graphique. Du tout.

Après avoir téléchargé votre bot, vous devez l'exécuter. Pour cela, vous avez besoin de :

  • Restaurer toutes les dépendances : restauration dotnet
  • Application de build : nom de build dotnet_project.sln -c Release
  • Accédez à la DLL construite ;
  • dotnet nom_of_file.dll

Toutes nos félicitations! Votre bot est en cours d'exécution. Cependant, le bot occupe malheureusement la console et il n'est pas facile de quitter le serveur VPS. De plus, en cas de redémarrage du serveur, vous devrez démarrer le bot d'une nouvelle manière. Il y a plusieurs façons de sortir de la situation. Tous sont liés au lancement au démarrage du serveur :

  • Ajouter un script d'exécution à /etc/init.d
  • Créez un service qui s'exécutera au démarrage.

Je ne vois pas l'intérêt de m'y attarder en détail, tout est décrit suffisamment en détail sur Internet.

résultats

Je suis content d'avoir accepté cette tâche. C'était ma première expérience de développement de bot, et je suis content d'avoir acquis de nouvelles connaissances en C # et de travailler avec Linux.

Lien vers le serveur Discord. Pour ceux qui jouent aux jeux Wargaming.
Lien vers le référentiel où se trouve le bot Discord.
Lien vers le référentiel DSharpPlus.
Je vous remercie!

Source: habr.com

Ajouter un commentaire