ProHoster > Blog > διαχείριση > Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS
Δημιουργία bot Discord σε .NET Core με ανάπτυξη σε διακομιστή VPS
Γεια σας Χαμπροβίτες!
Σήμερα θα δείτε ένα άρθρο που θα σας δείξει πώς να δημιουργήσετε ένα bot χρησιμοποιώντας C# σε .NET Core και πώς να το εκτελέσετε σε έναν απομακρυσμένο διακομιστή.
Το άρθρο θα αποτελείται από ένα υπόβαθρο, ένα προπαρασκευαστικό στάδιο, τη λογική γραφής και τη μεταφορά του bot σε έναν απομακρυσμένο διακομιστή.
Ελπίζω ότι αυτό το άρθρο θα βοηθήσει πολλούς αρχάριους.
Ιστορικό
Όλα ξεκίνησαν σε μια άυπνη φθινοπωρινή νύχτα που πέρασα στον διακομιστή Discord. Από τότε που μπήκα πρόσφατα μαζί του, άρχισα να τον μελετώ πάνω κάτω. Έχοντας βρει το κανάλι κειμένου "Κενές Θέσεις", ενδιαφέρθηκα, το άνοιξα και βρήκα ανάμεσα στις προσφορές που δεν με ενδιέφεραν, αυτές είναι:
Ευκαιρία να υποστηρίξετε και να επηρεάσετε το έργο που σας αρέσει.
Απόκτηση εμπειρίας εργασίας σε ομάδα.
Ευκαιρία επίδειξης και βελτίωσης των υπαρχουσών δεξιοτήτων.
Αυτό με ενδιέφερε αμέσως. Ναι, δεν πλήρωσαν για αυτό το έργο, αλλά δεν ζήτησαν υποχρεώσεις από εσάς και δεν θα είναι περιττό στο χαρτοφυλάκιο. Ως εκ τούτου, έγραψα στον διαχειριστή του διακομιστή και μου ζήτησε να γράψω ένα bot που θα δείχνει τα στατιστικά του παίκτη στο World of Tanks.
Η προπαρασκευαστική φάση
Discrod
Πριν ξεκινήσουμε να γράφουμε το bot μας, πρέπει να το δημιουργήσουμε για το Discord. Χρειάζεσαι:
Πηγαίνουμε στο "Οι εφαρμογές μου" και κάνουμε κλικ στο κουμπί "Προσθήκη νέας εφαρμογής", δίνοντας το όνομα της εφαρμογής και επιλέγοντας τον τύπο της
Αποθήκευση του αναγνωριστικού εφαρμογής
λογισμικό
Υπάρχει ήδη ελευθερία επιλογής. Κάποιος χρησιμοποιεί Visual Studio, κάποιος Rider, κάποιος είναι γενικά ισχυρός και γράφει κώδικα στο Vim (τελικά, οι πραγματικοί προγραμματιστές χρησιμοποιούν μόνο το πληκτρολόγιο, σωστά;). Ωστόσο, για να μην εφαρμόσετε το Discord API, μπορείτε να χρησιμοποιήσετε την ανεπίσημη βιβλιοθήκη C# "DSharpPlus". Μπορείτε να το εγκαταστήσετε είτε από το NuGet, είτε δημιουργώντας μόνοι σας τις πηγές από το αποθετήριο.
Για όσους δεν ξέρουν ή έχουν ξεχάσει πώς να εγκαταστήσουν εφαρμογές από το NuGet.Οδηγίες για το Visual Studio
Μεταβείτε στην καρτέλα Έργο - Διαχείριση πακέτων NuGet.
Κάντε κλικ στην κριτική και στο πεδίο αναζήτησης πληκτρολογήστε "DSharpPlus".
Επιλέξτε και εγκαταστήστε το πλαίσιο.
ΚΕΡΔΟΣ!
Το προπαρασκευαστικό στάδιο τελείωσε, μπορείτε να προχωρήσετε στη σύνταξη του bot.
Λογική γραφής
Δεν θα εξετάσουμε ολόκληρη τη λογική της εφαρμογής, θα δείξω μόνο πώς να εργάζεστε με την υποκλοπή μηνυμάτων από το bot και πώς να εργάζεστε με το Wargaming API.
Η εργασία με το bot Discord πραγματοποιείται μέσω του static async Task MainTask(string[] args).
Για να καλέσετε αυτήν τη λειτουργία, στο Main πρέπει να εγγραφείτε
Όπου διακριτικό είναι το διακριτικό του 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, θα πρέπει να φιλοξενηθεί σε έναν διακομιστή που λειτουργεί συνεχώς 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.