気軽に思ったことを投稿できるチャネルが欲しいな
Discord上で,時間経過でメッセージが消えるチャネルを作成することで,
チャットをすることの敷居が下がるかなと考えて,
サーバー活性化のためにBOTを作成しようと思った.
技術スタック
- C#
- Docker
- Discord
やったこと
DiscordBotを作成する.
Dicrod Developer Portalにアクセス
自分のアカウントでログインを済ませたら,
Applicationタブ->NewApplicationを押すと,以下の画面が表示されるので,
Botの名前を入れてCreate.
作成が完了したら,
OAuth2タブ->Oauth2 URL Generatorで,
Botにチェックを入れた後,
Manage MessagesとRead Message Historyの2つにチェックを入れて,
生成されたリンクから自分のサーバーに招待する.
最後にTOKENを取得します.(次以降で必要にあるのでどこかにメモしておくと良いです.)
BotタブからRESET TOKENを選択します.するとTOKENが表示されます.
Bot Permissionsは先程と同じ項目にチェックを入れてください.
wsl上でC#プロジェクトを作成する.
※wslにする必要はないかも.私はこのBotを将来的にデーモン化したいから一応wslに.
dotnet new console -n TweetManager(←任意のプロジェクト名)
cd TweetManager
dotnet add package Discord.Net --version 3.16.0
作成されたProgram.csに処理を記述していく.
using Discord;
using Discord.WebSocket;
using System;
using System.Threading.Tasks;
class Program{
private DiscordSocketClient _client = new DiscordSocketClient();
private ulong _targetChannelId = チャネルのID;
public static Task Main(string[] args) => new Program().MainAsync();
public async Task MainAsync(){
_client = new DiscordSocketClient();
_client.Log += Log;
_client.Ready += OnReadyAsync;
string token = "TOKEN";//ここにディスコードのTOKENを入れる
await _client.LoginAsync(TokenType.Bot,token);
await _client.StartAsync();
await Task.Delay(-1);
}
private async Task OnReadyAsync(){
Console.WriteLine("Bot is connected!");
var channel = _client.GetChannel(_targetChannelId) as IMessageChannel;
if(channel != null){
await Task.Run(async () =>{
while(true){
var messages = await channel.GetMessagesAsync().FlattenAsync();
var now = DateTimeOffset.UtcNow;
foreach(var message in messages){
//12時間経過していたら削除する.
if(message.Timestamp < now.AddHours(-12)){
Console.WriteLine("メッセージを削除します。");
await channel.DeleteMessageAsync(message);
}
}
//1hごとにチェックを入れる
await Task.Delay(TimeSpan.FromHours(1));
}
});
}
}
private Task Log(LogMessage msg){
Console.WriteLine(msg.ToString());
return Task.CompletedTask;
}
}
Program.csにチャネルIDとトークンを代入したら完了.
チャネルIDはディスコードのチャネルを右クリックでIDを取れます.
これらが完了したら以下のコマンドを実行してください.
dotnet run
これでBotの制作自体はおしまいです.
この状態では,Botが常駐している状態ではないので,PCを起動するたびにコマンドを打たないといけないので,次回はデーモン化などに挑戦していきます.