10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Discord APIの新しいWebhookエンドポイント(EditとDelete)

Last updated at Posted at 2020-12-14

はじめに

この記事はなんとなくDiscord Bot Advent Calendar 2020の14日目を埋めるという動機で書かれました。
なので、クオリティはお察しです(20分で書いたのでと23時40分に書きました。あと20分で書き上がるのか?)。

さて、discord/discord-api-docsを眺めていたらおもしろいものを見つけたので紹介しておきます。(discord/discord-api-docsを眺めるのは割と楽しいですよ。おすすめです。)

ほんとはSlash Commandsのことをやりたかったんですがまだリリースされていないのでどこかでやります。(Gatewayの方はどうせすぐ開発者が飛びつくのでOutgoing WebhookとCloud Functionsとこの記事で紹介するWebhookで遊ぶ。みたいなやつをやりたいと思います。)

discord/discord-api-docs

Discord APIのドキュメント(Discord Developer Portal — Documentation)GitHubのdiscord/discord-api-docsというRepositoryで管理されています。

このRepositoryのCommitやPRを眺めることで新しく実装される機能やAPIの変更点などをドキュメントのChange Logを見るよりも早く、正確に知ることができます。
また、PRではAPIやDiscordの方針についての議論がされていることもあります。

新しいWebhookエンドポイント

これがCommitです。どうやら、EditとDeleteが可能になったようです。まだドキュメントには反映されていないように見えますが叩いてみましょう。

あまりにも時間に余裕がないので以下に示すブラウザ拡張のREST Clientを使うことにします。
(私だってほんとはかっこよくcurlとかInvoke-WebRequestとか使いたいんです)
RESTClient, a debugger for RESTful web services.

セキュリティ上の警告

使用中のWebhook URLをむやみにこの記事のように公開することは避けてください。
(私はこの記事を書き終わったあとWebhook URLを削除するつもりです)

Webhookを作成する

新機能でもなんでもないので説明はしません。
image.png

メッセージを作成する

新機能でもなんでもないので説明はしませんといきたいのですがメッセージIDが今後必要なので説明してしまいます。

メッセージIDを取得するためにwaitパラメータを指定します。
URLは以下のようになります。

https://discord.com/api/webhooks/788055101943185408/o3JsFvBMZNaxUqitnRYKWqIrB-iM6YGbgldh_cAuP4GIT-mcsw6yLcnE1VyZ28QnRkIq?wait=true

メソッドをPOSTにし、ヘッダーにContent-Type: application/jsonを指定し実行します。

image.png

無事に投稿が完了したようです。
image.png

また、次のようなレスポンスが返却されます。

{
   "id":"788056956375007262",
   "type":0,
   "content":"あと5分とか無理ゲーでしょ",
   "channel_id":"788055071027101716",
   "author":{
      "bot":true,
      "id":"788055101943185408",
      "username":"edit hook",
      "avatar":null,
      "discriminator":"0000"
   },
   "attachments":[
      
   ],
   "embeds":[
      
   ],
   "mentions":[
      
   ],
   "mention_roles":[
      
   ],
   "pinned":false,
   "mention_everyone":false,
   "tts":false,
   "timestamp":"2020-12-14T14:56:59.790000+00:00",
   "edited_timestamp":null,
   "flags":0,
   "webhook_id":"788055101943185408"
}

ここで0時になりました。(やはり間に合いませんでした)

メッセージの編集

URLはCommitに従い、レスポンスで得られたMessage Idを${Webhook token}/messages/の後ろにつけて次のようになります。(waitパラメータなしでも結果が帰ってくるようです)

https://discord.com/api/webhooks/788055101943185408/o3JsFvBMZNaxUqitnRYKWqIrB-iM6YGbgldh_cAuP4GIT-mcsw6yLcnE1VyZ28QnRkIq/messages/788056956375007262

画像のようにメソッドをPATCHに変更しリクエストをなげます。

image.png

Discordクライアントで確認すると更新されています。
image.png
また、ステータスコード200で次のようなレスポンスが返却されました。

{
  "id": "788056956375007262",
  "type": 0,
  "content": "もう0時まわりましたけど?",
  "channel_id": "788055071027101716",
  "author": {
    "bot": true,
    "id": "788055101943185408",
    "username": "edit hook",
    "avatar": null,
    "discriminator": "0000"
  },
  "attachments": [],
  "embeds": [],
  "mentions": [],
  "mention_roles": [],
  "pinned": false,
  "mention_everyone": false,
  "tts": false,
  "timestamp": "2020-12-14T14:56:59.790000+00:00",
  "edited_timestamp": "2020-12-14T15:10:27.056358+00:00",
  "flags": 0,
  "webhook_id": "788055101943185408"
}

メッセージの削除

編集と同じURLへDELETEを発行するだけです。
image.png
メッセージが存在する場合は204が、削除済みの場合は404が返却されます。

感想

どんなに頑張っても1時間はかかってしまいますね。
以下に示すやらかしがなくても間に合いませんでした。
Slash CommandsとOutgoing WebhookとCloud FunctionsとWebhookで遊ぶ記事は面白そうなので書きたいと思います。

やらかし

messagesをつけ忘れて記事の成立が危うくなった人の図を示しておきます。

URLはCommitに従い、レスポンスで得られたMessage IdをWebhook tokenの後ろにつけて次のようになります。

https://discord.com/api/webhooks/788055101943185408/o3JsFvBMZNaxUqitnRYKWqIrB-iM6YGbgldh_cAuP4GIT-mcsw6yLcnE1VyZ28QnRkIq/788056956375007262?wait=true

image.png

画像のようにメソッドをPATCHに変更し…405 Method Not Allowed…あ、まだリリースされてなかったみたいですね。

10
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?