
Hallo, Habr-Bewohner!
Heute werden Sie mit einem Artikel vertraut gemacht, in dem erklÀrt wird, wie man einen Bot mit C# auf .NET Core erstellt und wie man ihn auf einem entfernten Server einrichtet.
Der Artikel wird aus einer Vorgeschichte, einem Vorbereitungsabschnitt, der Logikprogrammierung und dem Transfer des Bots auf den entfernten Server bestehen.
Ich hoffe, dieser Artikel hilft vielen AnfÀngern.
Vorgeschichte
Alles begann an einer schlaflosen Herbstnacht, die ich auf dem Discord-Server verbrachte. Da ich relativ neu dabei war, begann ich, ihn grĂŒndlich zu erkunden. Als ich den Textkanal âStellenangeboteâ entdeckte, wurde ich neugierig, öffnete ihn und fand unter den uninteressanten Angeboten dieses:
âProgrammierer (Bot-Entwickler)
Anforderungen:
- Kenntnisse in Programmiersprachen;
- FĂ€higkeit zum autodidaktischen Lernen.
WĂŒnsche:
- FĂ€higkeit, sich in fremden Code hineinzudenken;
- Kenntnisse ĂŒber die FunktionalitĂ€t von DISCORD.
Aufgaben:
- Entwicklung des Bots;
- UnterstĂŒtzung und Wartung des Bots.
Ihr Vorteil:
- Die Möglichkeit, ein interessantes Projekt zu unterstĂŒtzen und zu beeinflussen;
- Erwerb von Teamerfahrung;
- Die Möglichkeit, vorhandene FĂ€higkeiten zu demonstrieren und zu verbessern.â
Das hat sofort mein Interesse geweckt. Ja, fĂŒr diese Arbeit wurde nicht bezahlt, aber es wurden keine Verpflichtungen von mir gefordert, und es wird nicht schaden, es im Portfolio zu haben. Also schrieb ich dem Admin des Servers, und er bat mich, einen Bot zu erstellen, der die Statistiken eines Spielers in World of Tanks anzeigt.
Vorbereitungsphase

Discord
Bevor wir mit dem Schreiben unseres Bots beginnen können, mĂŒssen wir ihn fĂŒr Discord erstellen. Sie mĂŒssen:
- In Ihr Discord-Konto einloggen
- Im Tab âAnwendungenâ auf die SchaltflĂ€che âNeue Anwendungâ klicken und den Bot benennen
- Das Bot-Token erhalten, indem Sie sich in Ihren Bot einloggen und den Tab âBotâ in der Liste âEinstellungenâ finden
- Das Token irgendwo speichern
Wargaming
AuĂerdem mĂŒssen Sie eine Anwendung bei Wargaming erstellen, um Zugang zur Wargaming API zu erhalten. Auch hier ist alles einfach:
- Loggen Sie sich in Ihr Wargaming-Konto ein
- Gehen Sie zu âMeine Anwendungenâ und klicken Sie auf die SchaltflĂ€che âNeue Anwendung hinzufĂŒgenâ, benennen Sie die Anwendung und wĂ€hlen Sie den Typ aus
- Speichern Sie die Anwendungs-ID
Software
Hier gibt es bereits Freiheit der Wahl. Einige verwenden Visual Studio, andere Rider, manche nutzen sogar leistungsstarke Anwendungen und schreiben Code in Vim (wahre Programmierer benutzen schlieĂlich nur die Tastatur, oder?). Um jedoch die Discord API nicht selbst zu implementieren, kann man die inoffizielle Bibliothek fĂŒr C# "DSharpPlus" verwenden. Diese kann entweder aus NuGet installiert oder selbst aus dem Repository kompiliert werden.
FĂŒr diejenigen, die nicht wissen oder vergessen haben, wie man Anwendungen aus NuGet installiert.Anleitung fĂŒr Visual Studio
- Wir gehen zum Reiter Projekt â NuGet-Pakete verwalten;
- Wir klicken auf Durchsuchen und geben im Suchfeld "DSharpPlus" ein;
- Wir wÀhlen aus und installieren das Framework;
- PROFIT!
Der Vorbereitungsschritt ist abgeschlossen, wir können mit dem Schreiben des Bots fortfahren.
Schreiben der Logik

Wir werden die gesamte Logik der Anwendung nicht betrachten, ich zeige lediglich, wie man mit dem Abfangen von Nachrichten durch den Bot arbeitet und wie man mit der Wargaming API umgeht.
Die Arbeit mit dem Discord-Bot erfolgt ĂŒber die Funktion static async Task MainTask(string[] args);
Um diese Funktion aufzurufen, muss in Main geschrieben werden
MainTask(args).ConfigureAwait(false).GetAwaiter().GetResult();Als nĂ€chstes mĂŒssen Sie Ihren Bot initialisieren:
discord = new DiscordClient(new DiscordConfiguration
{
Token = token,
TokenType = TokenType.Bot,
UseInternalLogHandler = true,
LogLevel = LogLevel.Debug
}); Wo token der Token Ihres Bots ist.
Dann schreiben wir ĂŒber eine Lambda die erforderlichen Befehle, die der Bot ausfĂŒhren soll:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync("Hallo, " + e.Author.Username);
}
};
Wo e.Author.Username â der Benutzername des Nutzers abgerufen wird.
So wird Ihr Bot Sie begrĂŒĂen, wenn Sie eine Nachricht senden, die mit & beginnt.
Am Ende dieser Funktion muss await discord.ConnectAsync(); und await Task.Delay(-1); geschrieben werden;
Dies ermöglicht die AusfĂŒhrung von Befehlen im Hintergrund, ohne den Hauptthread zu blockieren.
Jetzt mĂŒssen wir uns mit der Wargaming API befassen. Hier ist alles einfach â Sie schreiben CURL-Anfragen, erhalten eine Antwort in Form einer JSON-Zeichenkette, extrahieren die benötigten Daten und fĂŒhren Manipulationen damit durch.
Beispielarbeit mit 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("Spieler nicht gefunden");
}
}
else
{
string error = parsed.error.message;
if (error == "NOT_ENOUGH_SEARCH_LENGTH")
{
throw new PlayerNotFound("Mindestens drei Zeichen erforderlich");
}
else if (error == "INVALID_SEARCH")
{
throw new PlayerNotFound("UngĂŒltige Suche");
}
else if (error == "SEARCH_NOT_SPECIFIED")
{
throw new PlayerNotFound("Leerer Nickname");
}
else
{
throw new Exception("Etwas ist schiefgegangen.");
}
}
return player;
}
Achtung! Es wird dringend davon abgeraten, alle Tokens und App-IDs im Klartext zu speichern! Mindestens â Discord sperrt solche Tokens, wenn sie im weltweiten Netz erscheinen, schlimmstenfalls â könnte der Bot von Angreifern missbraucht werden.
Deployment auf VPS â Server

Sobald Sie mit dem Bot fertig sind, muss er auf einem Server gehostet werden, der rund um die Uhr, 24/7, lĂ€uft. Dies hĂ€ngt damit zusammen, dass der Bot nur dann aktiv ist, wenn Ihre Anwendung lĂ€uft. Wenn Sie die Anwendung schlieĂen, schlĂ€ft auch Ihr Bot.
Es gibt viele VPS-Server auf dieser Welt, sowohl unter Windows als auch unter Linux, jedoch ist der Betrieb auf Linux in den meisten FĂ€llen deutlich gĂŒnstiger.
Auf dem Discord-Server wurde mir vscale.io empfohlen, und ich habe dort sofort einen virtuellen Server mit Ubuntu erstellt und den Bot hochgeladen. Ich werde nicht erklÀren, wie diese Seite funktioniert, sondern direkt mit den Bot-Einstellungen fortfahren.
Zuerst mĂŒssen Sie die notwendige Software installieren, die unseren Bot, geschrieben in .NET Core, ausfĂŒhrt. .
Als NĂ€chstes mĂŒssen Sie den Bot auf einen Git-Dienst wie GitHub hochladen und auf dem VPS-Server klonen oder auf anderem Wege herunterladen. Beachten Sie, dass Sie nur eine Konsole haben werden, GUI gibt es nicht. Ăberhaupt.
Nachdem Sie Ihren Bot heruntergeladen haben, mĂŒssen Sie ihn starten. Dazu mĂŒssen Sie:
- Alle AbhÀngigkeiten wiederherstellen: dotnet restore
- Die Anwendung erstellen: dotnet build name_project.sln -c Release
- Zum erstellten DLL wechseln;
- dotnet name_of_file.dll
Herzlichen GlĂŒckwunsch! Ihr Bot lĂ€uft. Allerdings benötigt der Bot leider die Konsole, und es ist nicht so einfach, aus dem VPS-Server auszusteigen. AuĂerdem mĂŒssen Sie den Bot im Falle eines Serverneustarts erneut starten. Es gibt ein paar LösungsansĂ€tze. Alle hĂ€ngen mit dem Start beim Serverstart zusammen:
- FĂŒgen Sie den Skriptstart zu /etc/init.d hinzu
- Erstellen Sie einen Dienst, der beim Start gestartet wird.
Ich sehe keinen Sinn darin, ausfĂŒhrlich darauf einzugehen, da im Internet alles ausreichend detailliert beschrieben ist.
Das DBMS Tarantool ist ein attraktives, zukunftstrÀchtiges Produkt zur Erstellung von hochbelasteten Anwendungen.
Ich freue mich, dass ich mich dieser Aufgabe angenommen habe. Es war meine erste Erfahrung bei der Entwicklung eines Bots, und ich bin froh, neue Kenntnisse in C# und der Arbeit mit Linux gewonnen zu haben.
Link zum Discord-Server.
Vielen Dank fĂŒr Ihre Aufmerksamkeit!
Quelle: habr.com
