Discord Botの簡単なc#プログラム

フロントとして使用するDiscord Botの入門プログラムをご紹介。c#でDiscord Botを実現するにはDiscord.netとDsharpplusの代表的な2種類のラッパーが存在し簡単に作成することができます。Discord.netの方が利用者が若干多い気がしますが、音声受信を行う場合はDsharpplusの方が良いです。

なお、Discord BotにはAPIキーが必要になります。APIキーの登録については他の方の記事の方がわかりやすいのでリンクを載せておきます。
Qiita Shun T様: Discord Botアカウント初期設定ガイド for Developer

以下のコードは、ほぼExampleに載っていたものです^^;
下記をNugetしてください。


「!ping」とチャットで入力するとBotが「Pon!」と返すだけの単純な内容です。
tokenはコードに直接書くのではなくユーザー環境変数に「DISCORD_TOKEN」を登録して、それを持ってくる仕様にしています。

using DSharpPlus;
using DSharpPlus.Entities;

namespace DSharpPlus_Bots
{
    public sealed class Program
    {
        public static async Task Main()
        {
            // ユーザー環境変数に登録した「DISCORD_TOKEN」を持ってくる
            string? token = Environment.GetEnvironmentVariable("DISCORD_TOKEN", System.EnvironmentVariableTarget.User);
            if (string.IsNullOrWhiteSpace(token))
            {
                Console.WriteLine("Please specify a token in the DISCORD_TOKEN environment variable.");
                Environment.Exit(1);

                return;
            }

            DiscordConfiguration config = new()
            {
                Token = token,
                Intents = DiscordIntents.AllUnprivileged | DiscordIntents.MessageContents
            };
            DiscordClient client = new(config);

            //メッセージイベント
            client.MessageCreated += async (client, eventArgs) =>
            {
                //ボットに応答しない
                if(eventArgs.Message.Author.Id==client.CurrentUser.Id)
                    return;

                if (eventArgs.Message.Content.Equals("!ping", StringComparison.OrdinalIgnoreCase))
                {
                    await eventArgs.Message.RespondAsync($"Pong! The gateway latency is {client.Ping}ms.");
                }
            };

            DiscordActivity status = new("with fire", ActivityType.Playing);

            await client.ConnectAsync(status, UserStatus.Online);

            await Task.Delay(-1);
        }
    }
}

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です