骨董品置場

C#とか学んだことかく

【Discord.NET】Discord Bot でどのチャンネルからメッセージが送られてきたか調べる。

書けてないもの書こうぜ!アドベントカレンダー(仮称)

5/2 担当の AntiqueR です。

最近趣味でカスタムコマンド Discord Bot を作ってました(Twitch の Night Bot のような)

github.com

サーバーの ID ごとにコマンド名とリプライを管理して、DB にコマンドが存在していれば返す感じのシンプルなボットです。

開発中に困ったのが、Guild Id (サーバーのID) とコマンドを紐つけて管理しているので、サーバー以外からのメッセージを反応しないようにするにはどうすれば良いかという問題でした。

解決方法

あった

docs.stillu.cc

メッセージの送信元は以下の4つで識別できます。

  • ITextChannel
    • サーバー内のチャット
  • IDMChannel
    • その名の通り DM
  • IGroupChannel
    • DMのグループチャンネル(多分)
  • IPrivateChannel
    • DM または DM のグループチャット

今回はサーバーからのメッセージだけに限定したかったので、ITextChannel かどうかを識別します。

使い方としてはこんな感じ

メッセージハンドラ内の処理

private async Task MessageHandle(SocketMessage message)
{
    if (!(message.Channel is ITextChannel) || !(message is SocketUserMessage msg) || msg.Author.IsBot) return;
}

簡単だった。

アドベントカレンダーに乗っけるものとしては小さめの記事になりましたが、それは次(か来週の記事で)挽回するということで...