【GO】DiscordのWebhookで通知ボットを作る


ディスコード上で動くボットを作ろうとすると少しハードルがあります。

ウェブフックは他サービスでイベントが起きた時の通知を受け取るような用途が主ですが、自分でリクエストを投げることもできるので通知ボットを作成可能です。

Golangを使って適当なメッセージを投げてみます。

BotとWebhook

ボットはディスコードにログインして各種イベントに対して処理をしたり、ディスコードで出来ることはなんでも出来ます。

ボットアカウントを作って、権限を付けて、イベントに合わせて色々な処理を行う必要があります(ディスコードはちょくちょく落ちたりもするので特に通信/再接続に関するハンドリングが面倒)。

golangで作るならbwmarrin/discordgoというライブラリがあります。

 

ウェブフックはイベントが起きた時に通知を送る仕組みです。

簡単かつメンテナンスフリーですが通知(書き込み)しかできません。

つまり通知のみならウェブフックを使うのが得策。

Webhook URLの作成

「サーバ設定」か「チャンネルの編集」を開いて「ウェブフック」タブを開く。

「ウェブフックの作成」ボタンを押すと作成画面に入ります。

名前とアイコンは通知側でも設定可能なので適当に。

チャンネルはここで設定した場所にしか送れないので通知したいところを指定(いつでも編集は可能です)。

これで出来たウェブフックURLに送信を行います。

GoでWebhookを使う

JSONを送る必要があるのでまずは構造体定義。

量が多いので適当に省いています。

構造はExecute WebhookEmbedを参照。

discordWebhookがメインで残りはEmbed(リッチな表示)用です。

 

処理自体は簡単で取得したURLにJSONを投げるだけ。

 

実際に送ってみます。

名前とコンテンツを指定して遅れました。ディスコードのユーザやボットはアカウントと投稿が紐づいていますがWebhookの場合は投稿ごとに別名で投稿可能です(色んな名前で投稿するとちゃんとそのまま残る)。

 

画像とTTS(text-to-speech)も設定してみましょう。

画像も投稿ごとに設定可能です。

TTSをオンにしたので読み上げてくれました(何言ってるかわかんなかったけど)。

 

Embedも試してみます。

いい感じになりました。


コメントを残す

メールアドレスが公開されることはありません。