🐖

Zapier使ってDiscordに定期の投票を作る

2025/04/14に公開

はじめに

私はゲーム仲間達と予定が合う日に遊んでいるのですが、予定調整するのが面倒なので、ZapierQuick Pollを組み合わせて、毎晩アンケートを自動投稿することで、集まれるかを確認していました。

ただし、2025年3月29日をもってQuick Pollがサービス終了したため、代替となる手段を実施しました。

同じ問題を抱えている人や新たに定期のアンケートを取りたい方向けに記録を残しておきます。

事前準備

ZapierとDiscordのアカウントは事前に作っておいてください。

また、投票を作りたいDiscordのサーバーにはZapierアプリを追加しておく必要があります。

Zapier使ってDiscordに定期の投票を作る

事前準備ができれば、やることはすごく簡単です。
下図の構成になるように作業していきます。

まずはZapsを作る

画面左上の「Create」ボタンからZapsを作成してください。

Schedule By Zapierを配置してタイマートリガーをセットする

Triggerには「Schedule By Zapier」を配置します。
18時の実行例が下図。
Configureの「Time of Day」には世界標準時(UTC)でセットするみたいなので、「実行したい時間-9時間」した値をセットすればOKです。

Discord API Requestを配置して投票を作成する

次に「Discord」をActionに配置します。
Setupは下図のようにセットします。Accountは投票を作成したいサーバーをセットしましょう。

Configureを設定していきます。

項目 設定値
Stop on error No ※最終ステップなのでなんでもいい
HTTP Method Post
URL "https://discord.com/api/v{version}/channels/{channel_id}/messages" ※versionとchannel_idについては後述
Query string parameters ※設定なし
Additional request headers "Content-Type" : "application/json"
{
  "content":"【{{291729969__date_year}}{{291729969__date_month}}{{291729969__date_day}}】とんかつアンケート",
  "tts":false,
  "embeds": [{
    "title": "PM8時45分までに投票してね!"
  }],
   "poll":{
      "question": { "text": "今日は何して遊ぶ?" },
      "answers": [{
         "answer_id": 1,
         "poll_media": { "text":"原神"}
      },{
         "answer_id": 2,
         "poll_media": { "text":"鳴潮"}
      },{
         "answer_id": 3,
         "poll_media": { "text":"モンハン Wilds"}
      },{
         "answer_id": 99,
         "poll_media": { "text":"とりあえず行く"}
      },{
         "answer_id": 100,
         "poll_media": { "text":"行けそうにない"}
      }],
   "duration":2,
   "allow_multiselect": true
   }
}

これらがセットすれば、下図のような投票が毎日作成される!

【補足】Discord APIでつかうversionとchannel_idの取得方法

version

Discord.devのAPI VersioningページでAvailableなバージョンを確認してください。

channel_id

まずDiscordの開発者モードがONになっている必要があります。
ユーザー設定の詳細設定から開発者モードをONにしてください。

次に投票を作成したいチャンネルを右クリックして、メニューの一番下「チャンネルIDをコピー」を押せばOKです。

おわりに

今回はZapierとDiscord APIを使って投票の自動投稿を実現しました。
Discord API の中でも投票機能のAPIは「Poll」と表現されています。投票締め切り日を表す「expiry」には上の例でもそれっぽい値を入れていますが、今も意図した時間に締め切られません。
うまく調整が終わったら、記事を更新しようと思います。

また、締め切り日時の加工は少し力業になっていて、上の例だと1~9月の間しか動きません。
月が二桁の場合も動かしたい場合は、切り替わりの時期に調整(年2回)をするか、ZapierのJavascript Actionを使って加工するかで実現できます。
後者は有料版じゃないと実装できないので、有料版使っている方は試してみてください。
私は無料版を使っているので、年二回の調整で運用していこうと思います。

参考文献

Discord.dev API Documentation

Discussion