ProHoster > blog > administratie > Een Discord-bot maken op .NET Core met implementatie op een VPS-server
Een Discord-bot maken op .NET Core met implementatie op een VPS-server
Hallo Chabrovieten!
Vandaag ziet u een artikel dat u laat zien hoe u een bot kunt maken met C# op .NET Core en hoe u deze op een externe server kunt uitvoeren.
Het artikel zal bestaan uit een achtergrond, een voorbereidende fase, het schrijven van logica en het overbrengen van de bot naar een externe server.
Ik hoop dat dit artikel veel beginners zal helpen.
prehistorie
Het begon allemaal op een slapeloze herfstnacht die ik op de Discord-server doorbracht. Sinds ik me onlangs bij hem heb gevoegd, begon ik hem van top tot teen te bestuderen. Nadat ik het tekstkanaal "Vacatures" had gevonden, raakte ik geïnteresseerd, opende het en vond onder de aanbiedingen die me niet interesseerden, deze zijn:
"Programmer (botontwikkelaar) vereisten:
kennis van programmeertalen;
vermogen tot zelflerend vermogen.
Пожелания:
vermogen om andermans code te begrijpen;
kennis van de DISCORD-functionaliteit.
doelstellingen:
bot-ontwikkeling;
ondersteuning en onderhoud van de bot.
Uw voordeel:
Mogelijkheid om het project dat u leuk vindt te ondersteunen en te beïnvloeden;
Ervaring opdoen met werken in een team;
Mogelijkheid om bestaande vaardigheden te demonstreren en te verbeteren.
Dit interesseerde me meteen. Ja, ze hebben niet voor dit werk betaald, maar ze hebben geen verplichtingen van u geëist en het zal niet overbodig zijn in de portefeuille. Daarom schreef ik naar de serverbeheerder en hij vroeg me om een bot te schrijven die de spelersstatistieken in World of Tanks zal tonen.
De voorbereidende fase
schijf
Voordat we beginnen met het schrijven van onze bot, moeten we deze voor Discord maken. Jij hebt nodig:
We gaan naar "Mijn applicaties" en klikken op de knop "Een nieuwe applicatie toevoegen", waarbij we de naam van de applicatie opgeven en het type selecteren
De applicatie-ID opslaan
Software
Er is al keuzevrijheid. Iemand gebruikt Visual Studio, iemand Rider, iemand is over het algemeen krachtig en schrijft code in Vim (echte programmeurs gebruiken tenslotte alleen het toetsenbord, toch?). Om de Discord API echter niet te implementeren, kunt u de niet-officiële C#-bibliotheek "DSharpPlus" gebruiken. U kunt het vanuit NuGet installeren of door de bronnen zelf vanuit de repository te bouwen.
Voor degenen die niet weten of zijn vergeten hoe ze applicaties van NuGet moeten installeren.Instructies voor Visual Studio
Ga naar het tabblad Project - NuGet-pakketten beheren;
Klik op de recensie en voer in het zoekveld "DSharpPlus" in;
Kader selecteren en installeren;
WINST!
De voorbereidende fase is voorbij, u kunt doorgaan met het schrijven van de bot.
Logica schrijven
We gaan niet in op de hele logica van de applicatie, ik laat alleen zien hoe te werken met het onderscheppen van berichten door de bot, en hoe te werken met de Wargaming API.
Werken met de Discord-bot gebeurt via de statische asynchrone taak MainTask(string[] args);
Om deze functie aan te roepen, moet u zich in Main registreren
Waar token het token van uw bot is.
Vervolgens schrijven we via de lambda de nodige commando's die de bot moet uitvoeren:
discord.MessageCreated += async e =>
{
string message = e.Message.Content;
if (message.StartsWith("&"))
{
await e.Message.RespondAsync(“Hello, ” + e.Author.Username);
}
};
Waar e.Author.Username de bijnaam van de gebruiker krijgt.
Op deze manier zal de bot u begroeten wanneer u een bericht verzendt dat begint met &.
Aan het einde van deze functie moet u wachten op discord.ConnectAsync(); en wacht op Task.Delay(-1);
Hierdoor kun je op de achtergrond opdrachten uitvoeren zonder de rode draad op te pakken.
Nu moeten we omgaan met de Wargaming API. Alles is hier eenvoudig - schrijf CURL-verzoeken, ontvang een antwoord in de vorm van een JSON-string, haal de benodigde gegevens eruit en voer er manipulaties op uit.
Een voorbeeld van werken met 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;
}
Aandacht! Het wordt ten strengste afgeraden om alle tokens en applicatie-ID's in leesbare tekst op te slaan! Discord verbiedt dergelijke tokens op zijn minst wanneer ze het wereldwijde netwerk binnenkomen, en maximaal begint de bot te worden gebruikt door aanvallers.
Implementeer naar VPS - server
Zodra u klaar bent met de bot, moet deze worden gehost op een server die constant 24/7 draait. Dit is te wijten aan het feit dat wanneer uw applicatie draait, de bot ook draait. Zodra je de applicatie uitschakelt, valt ook je bot in slaap.
Er zijn veel VPS-servers in deze wereld, zowel op Windows als op Linux, maar in de meeste gevallen is het veel goedkoper om op Linux te hosten.
Op de Discord-server kreeg ik het advies vscale.io, en ik heb er meteen een virtuele server op Ubuntu op gemaakt en de bot geüpload. Ik zal niet beschrijven hoe deze site werkt, maar ga direct naar de bot-instellingen.
Vervolgens moet je de bot uploaden naar een Git-service, zoals GitHub en dergelijke, en deze klonen naar een VPS-server, of je bot op andere manieren downloaden. Houd er rekening mee dat u alleen een console heeft, geen GUI. Helemaal niet.
Nadat u uw bot hebt gedownload, moet u deze uitvoeren. Hiervoor heb je nodig:
Gefeliciteerd! Je bot is actief. De bot neemt echter helaas de console in beslag en het is niet eenvoudig om de VPS-server te verlaten. Ook in het geval van een herstart van de server, moet u de bot op een nieuwe manier starten. Er zijn een aantal manieren om uit de situatie te komen. Ze zijn allemaal gerelateerd aan de lancering bij het opstarten van de server:
Voeg run-script toe aan /etc/init.d
Maak een service die wordt uitgevoerd bij het opstarten.
Ik zie het nut er niet van in om daar uitgebreid op in te gaan, op internet staat alles voldoende gedetailleerd beschreven.
Bevindingen
Ik ben blij dat ik deze opdracht heb aangenomen. Dit was mijn eerste ervaring met het ontwikkelen van bots, en ik ben blij dat ik nieuwe kennis heb opgedaan in C# en werken met Linux.