逆引き:discord.js・他ライブラリ・古い記事
discord.js、その他ライブラリや言語、古い記事と現在のバージョン差で起きる問題を整理します。
この記事で分かること
- Node.jsとdiscord.jsの版確認
- GatewayIntentBitsとpartials
- REST登録とinteractionCreate
- 音声/opus/buildエラーの切り分け
- Discord API共通仕様から見る
- ライブラリ固有の版差
コミュニティの相談ログを匿名化・一般化し、discord.js・他ライブラリ・古い記事の読み替えを整理した逆引きです。
discord.js 実装相談
Node.jsとpackage.json
実行環境と依存関係を先に確認します。
版を確認する
Node.jsとdiscord.jsのメジャーバージョンが古い記事と違うと、クラス名やimport、Intent指定が変わります。
依存関係
package.jsonがある場所でinstallしたか、lockfile、start script、dev/build scriptを確認します。
確認ポイント
- node -v
- npm ls discord.js
- package.json
- 起動コマンド
参考(公式ドキュメント)
GatewayIntentBitsとcache
Intentとpartials、cache前提を分けます。
Intent指定
メッセージ本文、メンバー、リアクションなどはClient作成時のintentsやpartialsに影響されます。
cache前提
取得済みでないMember、Message、Reactionを前提にしないよう、必要ならfetchします。
参考(公式ドキュメント)
REST登録とinteractionCreate
スラッシュコマンド登録と実行処理を分けます。
登録と処理は別
commandsのREST登録が成功しても、interactionCreateの分岐やreplyが正しいとは限りません。
guild/global
guild commandとglobal commandでは反映時間や確認方法が違います。開発中は対象guildで確認します。
参考(公式ドキュメント)
音声/opus/buildエラー
音声系依存関係とビルド環境を分けます。
レイヤーを分ける
discord.js本体、音声パッケージ、opus、ffmpeg、外部ダウンロード処理、OS/CPUの違いを分けます。
再インストールの前に見る
node_modulesをコピーした環境差、Node.jsのABI、package manager、build logを確認します。
確認ポイント
- Node.js版
- OS/CPU
- 音声パッケージ
- build log
その他ライブラリ・言語
Discord API共通チェック
言語が違っても変わらない仕様を先に見ます。
共通仕様
Token、OAuth2、Gateway Intent、Interaction、Permissions、Rate LimitはDiscord API共通です。
ライブラリ固有に進む前に
API共通仕様の設定漏れか、ライブラリ固有の書き方かを分けます。
参考(公式ドキュメント)
言語固有の実行環境
Java、Ruby、その他言語のビルド/実行問題を分けます。
ビルドツール
JavaならJDK、Maven/Gradle、Rubyならgem、その他言語ならランタイムとpackage managerを確認します。
最小サンプル
Discord接続前に、ライブラリの公式最小サンプルが動くかを確認します。
確認ポイント
- 言語バージョン
- ライブラリバージョン
- 依存解決ログ
ライブラリ公式情報を見る
非公式記事より対象バージョンの公式情報を優先します。
対象版
ライブラリ名が同じでも、Discord APIの対応版やメジャーバージョンで書き方が違います。
更新状況
古く更新されていないライブラリは、現在のIntentやInteractionへ対応しているか確認します。
質問時に揃えるもの
言語が違っても相談時の材料は共通化できます。
共通テンプレート
やりたいこと、使っている言語、ライブラリ、バージョン、最小コード、エラー全文、試したことを揃えます。
公開しない情報
Token、client secret、メール、個人情報、サーバー内URLは伏せます。
古い記事・バージョン差
日付とメジャーバージョン
記事の対象時期と手元の環境を先に比べます。
まず日付
Discord API、discord.py、discord.jsはIntent、Interaction、Embed、Command Handlerの前提が変わってきました。
版を揃える
記事の対象バージョンと手元のPython/Node.js/ライブラリ版が違う場合は、現在の公式例へ寄せます。
確認ポイント
- 記事の日付
- 対象ライブラリ版
- 手元のライブラリ版
IntentとInteraction前提
古いprefix command中心の記事を現在の設計に読み替えます。
Message Content
現在はメッセージ本文読み取りにMessage Content Intentが関わります。不要ならslash commandやボタンへ寄せます。
Interaction
slash commandやUI部品では、初回応答、defer、ephemeral、follow-upを前提に設計します。
参考(公式ドキュメント)
- https://docs.discord.com/developers/events/gateway
- https://docs.discord.com/developers/interactions/receiving-and-responding
Embed/Command Handler/API名の変化
名前が似ていても現在のAPIと違う場合があります。
クラス名とimport
discord.jsの古いRichEmbed、古いCommand Handler、discord.pyの古いClient例などは、そのまま使えないことがあります。
公式型とguide
最終的な書き方は現在の公式ドキュメント、型定義、移行情報で確認します。
参考(公式ドキュメント)
古い外部リンクの扱い
過去ログのリンクや画像をそのまま記事本文にしません。
リンク切れと仕様変更
古いリンクは消えていたり、現在の仕様と違う内容のまま残っていることがあります。
記事では確認順を書く
古いコードを転載するより、現在の公式情報へ戻る手順と見分け方を本文にします。
一次情報(公式ドキュメント)
- discord.js ガイド
- Discord Developer Documentation
- 利用ライブラリの公式ドキュメント
- discord.py ドキュメント