背景
2026年3月1日以降、Discord が 全ての非Stageボイスチャンネルで E2EE(DAVE)を必須化
古い discord.py(2.6.3 以前)は DAVE 非対応のため、接続直後に 4017 エラーで弾かれるようになった。
現象
ログ例:
Voice handshake complete → WebSocket closed with 4017
- Stage チャンネルは影響なし
- トークン・Intents・権限・PyNaCl・ネットワークは原因ではない
原因
- DAVE プロトコル未対応
- Identify ペイロードに DAVE バージョン情報が無いため、サーバが接続を拒否
解決手順
- discord.py を最新にアップデート
pip install -U "discord.py[voice]"
- DAVE 実装パッケージ
daveyをインストール
pip install davey
- PyNaCl が適切なバージョンか確認
pip install pynacl==1.5.0
- bot を再起動して確認
python bot.py
- DAVE が有効か確認
python -m discord --version
出力例:
- Python v3.11.9-final
- discord.py v2.7.1-final
- aiohttp v3.13.3
- davey v0.1.4
注意点
- Stage チャンネルは対象外
- トークンや権限の問題ではない
- 接続ログが「Voice handshake complete → 4017」の場合はこの原因