Création de Discord - bot sur .NET Core avec déploiement sur serveur VPS



Bonjour, Khabrovchans!

Aujourd'hui, vous lirez un article qui vous expliquera comment créer un bot à l'aide de C # sur .NET Core et comment l'obtenir sur un serveur distant.

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

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

Contexte


Tout a commencé par une nuit d'automne sans sommeil que j'ai passée sur le serveur Discord. Depuis que je l'ai rejoint relativement récemment, j'ai commencé à l'étudier de haut en bas. Ayant trouvé la chaîne de texte "Jobs", je me suis intéressée, l'ai ouverte, et ai trouvé parmi les propositions qui ne m'intéressaient pas, ceci:

"Programmeur (développeur bot)
Prérequis:

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

Souhaits:

  • capacité à comprendre le code de quelqu'un d'autre;
  • connaissance des fonctionnalités de DISCORD.

Tâches:

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

Votre avantage:

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


Cela m'a immédiatement intéressé. Oui, ils n’ont pas payé pour ce travail, mais ils n’ont exigé aucune obligation de votre part, et cela ne sera pas superflu dans le portefeuille. J'ai donc écrit l'administrateur du serveur, et il m'a demandé d'écrire un bot qui affichera les statistiques des joueurs dans World of Tanks.

Phase préparatoire



Discrod
Avant de commencer à écrire notre bot, vous devez le créer pour Discord. Vous devez:

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

Wargaming

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

  1. Nous allons sur le compte Wargaming à ce lien
  2. Allez dans «Mes applications» et cliquez sur le bouton «Ajouter une nouvelle application», en donnant le nom de l'application et en sélectionnant son type
  3. Enregistrer l'ID d'application

Logiciels

Il y a déjà une liberté de choix. Quelqu'un utilise Visual Studio, quelqu'un Rider, quelqu'un est généralement puissant et écrit du code dans Vim (encore, 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». Il peut être installé à partir de NuGet ou en collectant vous-même la source du référentiel.

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

  1. Accédez à l'onglet Projet - NuGet Package Management;
  2. Cliquez sur la revue et entrez «DSharpPlus» dans le champ de recherche;
  3. Nous sélectionnons et installons le framework;
  4. PROFIT!


La phase préparatoire est terminée, vous pouvez procéder à la rédaction du bot.

Logique d'orthographe




Nous ne considérerons pas toute la logique de l'application, je montrerai seulement comment travailler avec l'interception de messages par le bot, et comment travailler avec l'API Wargaming.

Le travail avec le bot Discord s'effectue via la fonction async statique Task MainTask (string [] args);
Pour appeler cette fonction, dans Main il faut s'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ù le jeton est le jeton de votre bot.
Ensuite, à travers le lambda, nous écrivons les commandes nécessaires que le bot devrait 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 - obtenir le surnom de l'utilisateur.

Ainsi, lorsque vous envoyez un message commençant par &, le bot vous accueille.

À la fin de cette fonction, vous devez vous enregistrer en attendant discord.ConnectAsync (); et attendre Task.Delay (-1);

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

Vous devez maintenant gérer l'API Wargaming. Tout est simple ici - écrivez des requêtes CURL, obtenez la réponse sous la forme de chaînes JSON, extrayez les données nécessaires à partir de là et faites 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 les ID d'application en texte clair! Au minimum - Discord interdit ces jetons lorsqu'ils arrivent sur le réseau mondial, au maximum - le bot commence à utiliser des cybercriminels.

Déployer sur un serveur VPS




Une fois que vous avez terminé avec le bot, vous devez le placer sur un serveur qui fonctionne constamment 24/7. Cela est dû au fait que lorsque votre application fonctionne, le bot fonctionne également. Dès que vous désactivez l'application, votre bot s'endort.

De nombreux serveurs VPS existent dans ce monde, à la fois sur Windows et Linux, mais dans la plupart des cas, Linux est plusieurs fois moins cher à héberger.

Sur le serveur Discord, j'ai été conseillé par vscale.io, et j'ai immédiatement créé un serveur virtuel sur Ubuntu et téléchargé le bot. Je ne décrirai pas comment ce site fonctionne, mais je procéderai immédiatement aux paramètres du bot.

Tout d'abord, vous devez installer le logiciel nécessaire qui exécutera notre bot écrit en .NET Core. La procédure à suivre est décrite ici .

Ensuite, vous devez télécharger le bot sur le service Git, comme GitHub et similaires, et le cloner sur le serveur VPS, ou, d'une autre manière, télécharger votre bot. Notez que vous n'aurez qu'une console, il n'y aura pas d'interface graphique. Absolument.

Après avoir téléchargé votre bot, vous devez l'exécuter. Pour ce faire, vous devez:

  • Restaurer toutes les dépendances: restauration dotnet
  • Build Application: dotnet build name_project.sln -c Release
  • Accédez à la DLL intégrée;
  • dotnet name_of_file.dll

Félicitations! Votre bot fonctionne. Cependant, le bot occupe malheureusement la console et il ne sera pas facile de quitter le serveur VPS. De plus, en cas de redémarrage du serveur, vous devrez redémarrer le bot. Il y a deux façons de sortir de la situation. Tous sont liés au démarrage au démarrage du serveur:

  • Ajouter un script exécuté à /etc/init.d
  • Créez un service qui démarrera au démarrage.

Je ne vois pas l'intérêt de les détailler, tout est décrit de manière suffisamment détaillée sur Internet.

Conclusions


Je suis heureux d'avoir accepté cette mission. Ce fut ma première expérience de développement de bot, et je suis heureux d'avoir acquis de nouvelles connaissances en C # et de travailler avec Linux.

Lien vers Discord - serveur. 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.
Merci de votre attention!

Source: https://habr.com/ru/post/fr479180/


All Articles