Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS

Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS

Γεια σας Χαμπροβίτες!

Σήμερα θα δείτε ένα άρθρο που θα σας δείξει πώς να δημιουργήσετε ένα bot χρησιμοποιώντας C# σε .NET Core και πώς να το εκτελέσετε σε έναν απομακρυσμένο διακομιστή.

Το άρθρο θα αποτελείται από ένα υπόβαθρο, ένα προπαρασκευαστικό στάδιο, τη λογική γραφής και τη μεταφορά του bot σε έναν απομακρυσμένο διακομιστή.

Ελπίζω ότι αυτό το άρθρο θα βοηθήσει πολλούς αρχάριους.

Ιστορικό

Όλα ξεκίνησαν σε μια άυπνη φθινοπωρινή νύχτα που πέρασα στον διακομιστή Discord. Από τότε που μπήκα πρόσφατα μαζί του, άρχισα να τον μελετώ πάνω κάτω. Έχοντας βρει το κανάλι κειμένου "Κενές Θέσεις", ενδιαφέρθηκα, το άνοιξα και βρήκα ανάμεσα στις προσφορές που δεν με ενδιέφεραν, αυτές είναι:

"Προγραμματιστής (προγραμματιστής bot)
απαιτήσεις:

  • Γνώση γλωσσών προγραμματισμού·
  • ικανότητα για αυτομάθηση.

Пожелания:

  • ικανότητα κατανόησης του κώδικα άλλων ανθρώπων.
  • γνώση της λειτουργικότητας του DISCORD.

Στόχοι:

  • ανάπτυξη bot?
  • υποστήριξη και συντήρηση του bot.

Το όφελός σας:

  • Ευκαιρία να υποστηρίξετε και να επηρεάσετε το έργο που σας αρέσει.
  • Απόκτηση εμπειρίας εργασίας σε ομάδα.
  • Ευκαιρία επίδειξης και βελτίωσης των υπαρχουσών δεξιοτήτων.


Αυτό με ενδιέφερε αμέσως. Ναι, δεν πλήρωσαν για αυτό το έργο, αλλά δεν ζήτησαν υποχρεώσεις από εσάς και δεν θα είναι περιττό στο χαρτοφυλάκιο. Ως εκ τούτου, έγραψα στον διαχειριστή του διακομιστή και μου ζήτησε να γράψω ένα bot που θα δείχνει τα στατιστικά του παίκτη στο World of Tanks.

Η προπαρασκευαστική φάση

Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS
Discrod
Πριν ξεκινήσουμε να γράφουμε το bot μας, πρέπει να το δημιουργήσουμε για το Discord. Χρειάζεσαι:

  1. Συνδεθείτε στον λογαριασμό Discord по ссылке
  2. Στην καρτέλα "Εφαρμογές", κάντε κλικ στο κουμπί "Νέα εφαρμογή" και ονομάστε το bot
  3. Λάβετε ένα διακριτικό bot κάνοντας είσοδο στο bot σας και βρίσκοντας την καρτέλα "Bot" στη λίστα "Ρυθμίσεις"
  4. Αποθηκεύστε το διακριτικό κάπου

Wargaming

Επίσης, πρέπει να δημιουργήσετε μια εφαρμογή στο Wargaming για να αποκτήσετε πρόσβαση στο Wargaming API. Και εδώ όλα είναι απλά:

  1. Συνδεθείτε στον λογαριασμό σας στο Wargaming από αυτόν τον σύνδεσμο
  2. Πηγαίνουμε στο "Οι εφαρμογές μου" και κάνουμε κλικ στο κουμπί "Προσθήκη νέας εφαρμογής", δίνοντας το όνομα της εφαρμογής και επιλέγοντας τον τύπο της
  3. Αποθήκευση του αναγνωριστικού εφαρμογής

λογισμικό

Υπάρχει ήδη ελευθερία επιλογής. Κάποιος χρησιμοποιεί Visual Studio, κάποιος Rider, κάποιος είναι γενικά ισχυρός και γράφει κώδικα στο Vim (τελικά, οι πραγματικοί προγραμματιστές χρησιμοποιούν μόνο το πληκτρολόγιο, σωστά;). Ωστόσο, για να μην εφαρμόσετε το Discord API, μπορείτε να χρησιμοποιήσετε την ανεπίσημη βιβλιοθήκη C# "DSharpPlus". Μπορείτε να το εγκαταστήσετε είτε από το NuGet, είτε δημιουργώντας μόνοι σας τις πηγές από το αποθετήριο.

Για όσους δεν ξέρουν ή έχουν ξεχάσει πώς να εγκαταστήσουν εφαρμογές από το NuGet.Οδηγίες για το Visual Studio

  1. Μεταβείτε στην καρτέλα Έργο - Διαχείριση πακέτων NuGet.
  2. Κάντε κλικ στην κριτική και στο πεδίο αναζήτησης πληκτρολογήστε "DSharpPlus".
  3. Επιλέξτε και εγκαταστήστε το πλαίσιο.
  4. ΚΕΡΔΟΣ!

Το προπαρασκευαστικό στάδιο τελείωσε, μπορείτε να προχωρήσετε στη σύνταξη του bot.

Λογική γραφής

Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS

Δεν θα εξετάσουμε ολόκληρη τη λογική της εφαρμογής, θα δείξω μόνο πώς να εργάζεστε με την υποκλοπή μηνυμάτων από το bot και πώς να εργάζεστε με το Wargaming API.

Η εργασία με το bot Discord πραγματοποιείται μέσω του static async Task MainTask(string[] args).
Για να καλέσετε αυτήν τη λειτουργία, στο Main πρέπει να εγγραφείτε

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

Στη συνέχεια, πρέπει να αρχικοποιήσετε το bot σας:

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

Όπου διακριτικό είναι το διακριτικό του bot σας.
Στη συνέχεια, μέσω του λάμδα, γράφουμε τις απαραίτητες εντολές που πρέπει να εκτελέσει το bot:

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

Όπου το e.Author.Username παίρνει το ψευδώνυμο του χρήστη.

Με αυτόν τον τρόπο, όταν στέλνετε οποιοδήποτε μήνυμα που ξεκινά με &, το bot θα σας χαιρετήσει.

Στο τέλος αυτής της συνάρτησης, πρέπει να γράψετε await discord.ConnectAsync(); και περιμένετε Task.Delay(-1);

Αυτό θα σας επιτρέψει να εκτελείτε εντολές στο παρασκήνιο χωρίς να καταλαμβάνετε το κύριο νήμα.

Τώρα πρέπει να ασχοληθούμε με το Wargaming API. Όλα είναι απλά εδώ - γράψτε αιτήματα CURL, λάβετε μια απάντηση με τη μορφή συμβολοσειράς JSON, τραβήξτε τα απαραίτητα δεδομένα από εκεί και εκτελέστε χειρισμούς σε αυτά.

Ένα παράδειγμα εργασίας με το 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;
        }

Προσοχή! Δεν συνιστάται αυστηρά η αποθήκευση όλων των διακριτικών και των αναγνωριστικών εφαρμογών σε καθαρό κείμενο! Τουλάχιστον, το Discord απαγορεύει τέτοια διακριτικά όταν εισέρχονται στο παγκόσμιο δίκτυο και το πολύ, το bot αρχίζει να χρησιμοποιείται από εισβολείς.

Ανάπτυξη σε διακομιστή VPS

Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS

Μόλις τελειώσετε με το bot, θα πρέπει να φιλοξενηθεί σε έναν διακομιστή που λειτουργεί συνεχώς 24/7. Αυτό οφείλεται στο γεγονός ότι όταν εκτελείται η εφαρμογή σας, εκτελείται και το bot. Μόλις απενεργοποιήσετε την εφαρμογή, το bot σας αποκοιμιέται επίσης.

Υπάρχουν πολλοί διακομιστές VPS σε αυτόν τον κόσμο, τόσο σε Windows όσο και σε Linux, ωστόσο, στις περισσότερες περιπτώσεις, είναι πολύ φθηνότερο να φιλοξενήσετε σε Linux.

Στον διακομιστή Discord, με ενημέρωσαν το vscale.io και δημιούργησα αμέσως έναν εικονικό διακομιστή στο Ubuntu σε αυτόν και ανέβασα το bot. Δεν θα περιγράψω πώς λειτουργεί αυτός ο ιστότοπος, αλλά θα πάω κατευθείαν στις ρυθμίσεις του bot.

Πρώτα απ 'όλα, πρέπει να εγκαταστήσετε το απαραίτητο λογισμικό που θα τρέχει το bot μας γραμμένο σε .NET Core. Πώς να το κάνετε περιγράφεται εδώ.

Στη συνέχεια, πρέπει να ανεβάσετε το bot σε μια υπηρεσία Git, όπως το GitHub και παρόμοια, και να το κλωνοποιήσετε σε έναν διακομιστή VPS ή να κάνετε λήψη του bot σας με άλλους τρόπους. Λάβετε υπόψη ότι θα έχετε μόνο κονσόλα, χωρίς GUI. Καθόλου.

Αφού κατεβάσετε το bot σας, πρέπει να το εκτελέσετε. Για αυτό, χρειάζεστε:

  • Επαναφορά όλων των εξαρτήσεων: επαναφορά dotnet
  • Δημιουργία εφαρμογής: dotnet build name_project.sln -c Έκδοση
  • Μεταβείτε στο ενσωματωμένο DLL.
  • dotnet name_of_file.dll

Συγχαρητήρια! Το bot σας τρέχει. Ωστόσο, το bot, δυστυχώς, καταλαμβάνει την κονσόλα και δεν είναι εύκολο να βγείτε από τον διακομιστή VPS. Επίσης, σε περίπτωση επανεκκίνησης διακομιστή, θα πρέπει να ξεκινήσετε το bot με νέο τρόπο. Υπάρχουν δύο τρόποι εξόδου από την κατάσταση. Όλα αυτά σχετίζονται με την εκκίνηση κατά την εκκίνηση του διακομιστή:

  • Προσθέστε το σενάριο εκτέλεσης στο /etc/init.d
  • Δημιουργήστε μια υπηρεσία που θα εκτελείται κατά την εκκίνηση.

Δεν βλέπω το νόημα να σταθώ σε αυτά λεπτομερώς, όλα περιγράφονται με επαρκείς λεπτομέρειες στο Διαδίκτυο.

Ευρήματα

Χαίρομαι που ανέλαβα αυτή την αποστολή. Αυτή ήταν η πρώτη μου εμπειρία ανάπτυξης bot και χαίρομαι που απέκτησα νέες γνώσεις στη C # και δουλεύω με Linux.

Σύνδεση με τον διακομιστή Discord. Για όσους παίζουν παιχνίδια Wargaming.
Σύνδεση με το αποθετήριο όπου βρίσκεται το Discord bot.
Σύνδεσμος στο αποθετήριο DSharpPlus.
Спасибо за внимание!

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο