Első lépések
C# template
Az előző posztban létrehoztunk egy botot, amit most online állapotba fogunk hozni. A legújabb .NET verzió, amit a könyvtár jelenleg támogat az a 6-os, így azt fogjuk használni.
Nulladik lépésnek ajánlom ezt a C# template-et, amit én készítettem kifejezetten VSCode-hoz. Ha inkább használnál Visual Studiot, akkor hozz létre azzal egy .NET 6-os konzolos applikációt, és kövess onnan.
A template-em egy kis előkészületet igényel, amiről olvashatsz a README.md állományban. Továbbá .NET 7-et akar használni, ami nekünk nem lesz jó, ezért 2 helyen ezt át kell írni. Az első az /src/MyProject.csproj fájlban. Írjuk át a net7.0-t net6.0-ra. Másik ilyen, ahol ugyan ezt kell átírni a /.vscode/launch.json fájlban található. Végül néhány dolgot törölhetünk is, mert nem fogjuk használni. Ilyen a docs és a tests mappák, illetve ha gondolod, akkor a README.md-t is kidobhatod.
Váz kiépítése
Első lépés a Discord.NET NuGet csomag telepítése. Visual Studioban ezt könnyedén megteheted a beépített NuGet Package Managerrel. VSCode-ban az ajánlott kiegészítők között az egyikkel lehet a Command Promptból telepíteni a név megadásával. Telepítsük a legújabb verziót (nekem 3.8.1) és futtassunk egy dotnet restore parancsot a projektünkre (Visual Studioban nem kell, VSCode-ban felugró ablak ajánlja).
Én amondó vagyok, hogy a Program.cs fájlba majd csak egyedül a bot indítását tegyük, a logikát pedig külön. Erre létrehozok egy C# állományt azzal a névvel, aminek elneveztem a botomat. A projekt namespace-e is ez lesz. Itt csinálok egy ilyen osztályt:
using Discord;
using Discord.WebSocket;
namespace DNetTutorial;
public class DNetTutorial
{
// A kliens, ami a Discord API-val kommunikál
public DiscordSocketClient Client { get; }
public DNetTutorial()
{
Client = new();
}
// Innen indul a bot.
// Az asyncot szokjuk meg, mert a DC API-nak async metódusai vannak.
public async Task MainAsync()
{
}
// Log metódus kifejezetten a Discord.NET-hez.
// Minden fontosabb történést fog logolni formázva.
private Task Log(LogMessage message)
{
Console.WriteLine(message.ToString());
return Task.CompletedTask;
}
}
A MainAsync() metódusból fog minden kiindulni, és itt is fogjuk elindítani a botot. Hozzárendelünk eventeket, amik az egyes történéseket fogják figyelni. Itt egy példa:
using Discord;
using Discord.WebSocket;
namespace DNetTutorial;
public class DNetTutorial
{
public DiscordSocketClient Client { get; }
public DNetTutorial()
{
Client = new();
}
public async Task MainAsync()
{
Client.Log += Log;
// !!! A token-edet így ne tedd ki publikusan sehova !!!
string token = "A.BOTOD.TOKENE.AMIT.KIMÁSOLTÁL";
await Client.LoginAsync(TokenType.Bot, token);
await Client.StartAsync();
await Task.Delay(-1);
}
private Task Log(LogMessage msg)
{
Console.WriteLine(msg.ToString());
return Task.CompletedTask;
}
}
Már csak egy dolog kell ahhoz, hogy végre elinduljon ez a fránya emberutánzó szoftverdarabka. Meg kell hívni a fő Main() metódusból a mi saját MainAsync() metódusunkat. Ezért ezt tesszük a Program.cs fájlba:
namespace DNetTutorial;
class Program
{
static void Main() =>
new DNetTutorial().MainAsync().GetAwaiter().GetResult();
private Program() { }
}
Most már el is indíthatjuk a programot, és voilá! a botunk Online van, de nem tudunk vele semmit se csinálni. A következő posztban megtanuljuk, hogy hogyan bírjuk működésre néhány alapvető event segítségével.