この記事は何?
自身がDiscord BOTの開発を通して得た、忘れがちな知識をまとめておく記事です。
ご覧になる皆さんにとって、参考になるかは分かりませんが共有しておこうと思います。
内容は、随時更新されます。
なお、サンプルコードなどを載せる際は、基本的にライブラリはdiscord.jsを使用します。
目次
リクエスト系
Create DM
Create DMはDMチャンネルが無くても作成済みでもDM Channelのデータが得られますが、DMチャンネルを新規作成する際に CHANNEL_CREATE イベントは発火しません。
Get Channel Message
Get Channel Messageは基本的にMessageを構成するすべてのデータが手に入りますが、一部のデータは別途取得する必要があります。
Channelのデータ
Channel自体のデータは得られず、channel_idプロパティとしてチャンネルのIDだけが得られます。
ほとんどのライブラリは、Discordへの接続時にチャンネルデータをキャッシュしていて、ライブラリ内でデータを補完するため、気にする必要はありませんが、必要に応じてGET/channels/{channel.id}でデータを別途フェッチして取得する必要があります。
Userのデータ
authorプロパティとして、id username avatar discriminator public_flagsプロパティを含むオブジェクトが得られます。
(対象のユーザがBOT場合のみbotプロパティが含まれす。)
そのため、ギルド内・DM内のメッセージに関わらず、User/Memberのデータどちらの完全なデータを得たい場合でも、別途フェッチして取得する必要があります。
メンションのデータ
mentionsプロパティとしてUserのデータと同様のデータが配列で、mention_rolesプロパティとしてロールのIDが配列で得られます。
Reactionのデータ
reactionsプロパティとして、emoji count meのプロパティを含む全リアクションのオブジェクトの配列が得られます。
更にemojiプロパティは、id nameプロパティを含むオブジェクトが得られます。
なお、リアクションしたユーザーに関するデータは一切含まれないため、必要に応じてGET/channels/{channel.id}/messages/{message.id}/reactions/{emoji}でデータを別途フェッチして取得する必要があります。
イベント系
MESSAGE_REACTION_ADDイベント
リアクションされたメンバーや各種IDのデータが得られますが、Guild、Channel、Message、Roleなどのデータは別途取得する必要があります。
各種IDのデータ
リアクションされたメッセージのguild_id channel_id message_id、リアクションしたユーザーのuser_idが得られます。
User/Memberのデータ
memberプロパティとして、完全なMemberのデータが得られます。
なお、Memberのデータに含まれるuserプロパティは、Userのデータと同様の内容のものが得られます。
Emojiのデータ
emojiプロパティとして、name id プロパティを含むオブジェクトが得られます。
スレッド関係
thread_metadataのlockedプロパティ
設定時間発言が無かった場合に起こる自動アーカイブと スレッドの管理 権限を持たないユーザーによる手動アーカイブでは false、スレッドの管理 権限を持ったメンバーによる手動アーカイブでは true となる。
その他わかっていること
- スレッドがアーカイブされる時間は正確ではなく、数分ほどのタイムラグがある。
その他
BOTのトークンからIDを取り出す
Discordのトークンは先頭から最初の . までがbase64にエンコードされたBOTのIDになっているので、最初の . 以降を取り除いてデコードすれば元のIDが得られる。
atob('YOUR_BOT_TOKEN'.replace(/\..+/, ''));
トリビア
- Slash Commandsの使用に、『チャンネルを見る』権限は不要
- メッセージ内でURLが重複している場合は、同URLに対して1つまでしか埋め込みが表示されない