この記事は何?
自身が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つまでしか埋め込みが表示されない