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

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

Bonjour, les membres de Habr!

Aujourd'hui, vous découvrirez un article qui expliquera comment créer un bot en utilisant C# sur .NET Core, et comment le déployer sur un serveur distant.

L'article sera composé d'une histoire, d'une étape préparatoire, de l'écriture de la logique et du transfert du bot sur le serveur distant.

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

Contexte

Tout a commencé lors d'une nuit d'automne insomnie que je passais sur un serveur Discord. Comme je venais de rejoindre, j'ai commencé à l'explorer. En découvrant le canal textuel 'Offres d'emploi', j'ai été intrigué, je l'ai ouvert et j'ai trouvé parmi les offres qui ne m'intéressaient pas celle-ci :

« Programmeur (développeur de bot) »
Exigences :

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

Souhaits :

  • capacitĂ© Ă  comprendre le code des autres ;
  • connaissance des fonctionnalitĂ©s de DISCORD.

TĂąches :

  • dĂ©veloppement du bot ;
  • support et maintenance du fonctionnement du bot.

Votre avantage :

  • PossibilitĂ© de soutenir et d'influencer un projet qui vous plaĂźt ;
  • Acquisition d'expĂ©rience de travail en Ă©quipe ;
  • PossibilitĂ© de dĂ©montrer et d'amĂ©liorer les compĂ©tences existantes.


Cela m'a immédiatement intéressé. Oui, ce travail n'était pas rémunéré, mais aucune obligation n'était requise, et cela ne serait pas superflu dans mon portfolio. J'ai donc écrit à l'admin du serveur, et il m'a demandé de créer un bot qui afficherait les statistiques des joueurs dans World of Tanks.

Étape prĂ©paratoire

Création d'un bot Discord en .NET Core avec déploiement sur un serveur VPS
Discord
Avant de commencer à écrire notre bot, il faut d'abord le créer pour Discord. Vous devez :

  1. Connectez-vous Ă  votre compte Discord via le lien
  2. Dans l'onglet 'Applications', cliquez sur le bouton 'Nouvelle application' et donnez un nom au bot
  3. Obtenez le token du bot en vous rendant sur votre bot et en trouvant l'onglet 'Bot' dans la liste 'ParamĂštres'
  4. Conservez le token quelque part

Wargaming

Il est également nécessaire de créer une application sur Wargaming pour accéder à l'API Wargaming. C'est également simple :

  1. Connectez-vous Ă  votre compte Wargaming Ă  ce lien
  2. Accédez à 'Mes applications' et appuyez sur le bouton 'Ajouter une nouvelle application', en donnant un nom à l'application et en choisissant son type
  3. Conservez l'ID de l'application

Logiciel

Ici, vous avez dĂ©jĂ  la libertĂ© de choix. Certains utilisent Visual Studio, d'autres Rider, et certains codent mĂȘme dans Vim (aprĂšs tout, de vrais programmeurs n'utilisent que le clavier, n'est-ce pas ?). Cependant, pour Ă©viter de mettre en Ɠuvre l'API Discord, vous pouvez utiliser la bibliothĂšque non officielle pour C# « DSharpPlus ». Vous pouvez l'installer soit via NuGet, soit en compilant les sources vous-mĂȘme Ă  partir du dĂ©pĂŽt.

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

  1. Allez dans l'onglet Projet – Gestion des packages NuGet ;
  2. Cliquez sur Explorer et dans le champ de recherche, tapez « DSharpPlus » ;
  3. Sélectionnez et installez le framework ;
  4. PROFIT!

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

Écriture de la logique

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

Nous ne considérerons pas toute la logique de l'application, je vais juste montrer comment intercepter les messages avec le bot et comment utiliser l'API Wargaming.

Le travail avec le bot Discord se fait via la fonction static async Task MainTask(string[] args) ;
Pour appeler cette fonction, dans Main, vous devez écrire

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Ăč token est le jeton de votre bot.
Ensuite, via une lambda, vous écrivez 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(“Bonjour, ” + e.Author.Username);
    }
};

OĂč e.Author.Username est l'obtention du pseudo de l'utilisateur.

Ainsi, lorsque vous envoyez tout message commençant par &, le bot vous saluera.

À la fin de cette fonction, il est nĂ©cessaire d'Ă©crire await discord.ConnectAsync(); et await Task.Delay(-1);

Cela permettra d'exécuter des commandes en arriÚre-plan sans occuper le thread principal.

Maintenant, il est nĂ©cessaire de comprendre l'API Wargaming. Ici, tout est simple – vous Ă©crivez des requĂȘtes CURL, recevez la rĂ©ponse sous forme de chaĂźne JSON, extrayez les donnĂ©es nĂ©cessaires et effectuez des manipulations.

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("Joueur non trouvé");
                }
            }
            else
            {
                string error = parsed.error.message;
                if (error == "NOT_ENOUGH_SEARCH_LENGTH")
                {
                    throw new PlayerNotFound("Au moins trois caractĂšres requis");
                }
                else if (error == "INVALID_SEARCH")
                {
                    throw new PlayerNotFound("Recherche invalide");
                }
                else if (error == "SEARCH_NOT_SPECIFIED")
                {
                    throw new PlayerNotFound("Nickname vide");
                }
                else
                {
                    throw new Exception("Quelque chose a mal tourné.");
                }
            }

            return player;
        }

Attention ! Il est fortement dĂ©conseillĂ© de stocker tous les tokens et ID d'applications en clair ! Au minimum, Discord bannit de tels tokens lorsqu'ils sont exposĂ©s sur le Web, au maximum, le bot peut ĂȘtre exploitĂ© par des malfaiteurs.

DĂ©ploiement sur VPS – serveur

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

Une fois que vous avez terminĂ© avec le bot, il doit ĂȘtre placĂ© sur un serveur qui fonctionne en continu 24/7. Cela est dĂ» au fait que lorsque votre application fonctionne, le bot fonctionne Ă©galement. DĂšs que vous Ă©teignez l'application, votre bot entre en veille.

Il existe de nombreux serveurs VPS dans ce monde, tant sous Windows que sous Linux, mais dans la plupart des cas, il est beaucoup moins coûteux de s'installer sur Linux.

Sur le serveur Discord, on m'a recommandé vscale.io, et j'ai immédiatement créé un serveur virtuel sous Ubuntu et téléchargé le bot. Je ne vais pas décrire comment ce site fonctionne, je vais directement passer à la configuration du bot.

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

Ensuite, vous devez télécharger le bot sur un service Git, comme GitHub et des similaires, et le cloner sur le serveur VPS, ou, par d'autres moyens, télécharger votre bot. Notez que vous aurez seulement une console, il n'y aura pas de GUI. Pas du tout.

Une fois que vous avez téléchargé votre bot, vous devez le lancer. Pour cela, vous devez :

  • Restaurer toutes les dĂ©pendances : dotnet restore
  • Construire l'application : dotnet build name_project.sln -c Release
  • Passer au DLL construite ;
  • dotnet name_of_file.dll

Félicitations ! Votre bot est lancé. Cependant, le bot, malheureusement, occupe la console, et il n'est pas si facile de se déconnecter du serveur VPS. De plus, en cas de redémarrage du serveur, il faudra relancer le bot. Il existe quelques solutions. Toutes elles concernent le lancement au démarrage du serveur :

  • Ajouter le lancement du script dans /etc/init.d
  • CrĂ©er un service qui sera lancĂ© au dĂ©marrage.

Je ne vois pas vraiment l'intĂ©rĂȘt de s'attarder sur eux, tout est assez bien dĂ©crit sur Internet.

Conclusions

Je suis heureux d'avoir pris ce projet en main. C'était ma premiÚre expérience de développement de bot, et je suis heureux d'avoir acquis de nouvelles connaissances en C# et sur Linux.

Lien vers le serveur Discord. Pour ceux qui jouent Ă  des jeux Wargaming.
Lien vers le dĂ©pĂŽt oĂč se trouve le bot Discord.
Lien vers le dépÎt DSharpPlus.
Merci de votre attention !

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster