Ugrás a tartalomra

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.