はじめに
Discord botの改修作業をしていると、intents周りのエラーが出ました。直したのでメモを残しておきます。
プログラミング初心者につき、何か間違いあったらコメントお願いいたします。
開発環境
- discord.py 2.1.0
- python3
起きたこと
Botを実行すると以下のようなエラーが出た
Traceback (most recent call last): File "main.py", line 12, in <module> client = discord.Client() TypeError: __init__() missing 1 required keyword-only argument: 'intents'
解決方法
とくに拘りがない場合
client = discord.Client()
を
client = discord.Client(intents=discord.Intents.all())
に書き換える
一体何だったのか
Discord.pyのアップデートにより、intents
が必須になったようです。
公式ドキュメントでは以下のように例が示されています。
# before client = discord.Client() # after intents = discord.Intents.default() client = discord.Client(intents=intents)
そもそもintentsとは何なのか
ドキュメントには以下のように記載があります。
バージョン1.5では Intents が導入されました。これにより、Botの書き方が根本的に変わります。基本的にインテントは、特定のイベント群をBotに
サブスクライブさせるためのものです。各インテントに対応するイベントは、 Intents のドキュメントに個別の属性として記載されています。インテントは intents 引数を介して Client またはそのサブクラス(AutoShardedClient, AutoShardedBot, Bot)のコンストラクタに渡されます。
当方、猿以下なので、あんまり理解が及びませんでしたが・・・
intentを指定しないことは、つまりそれに関するイベントを一切受信しなくなるようです。
標準的なインテントに関しては、デフォルトで渡すことができ、追加の許可や設定を必要としません。しかし、一部の特権的なintentsは、まずDiscord のDeveloper portal内で設定を必要とします。
(逆にいうと、個人開発レベルの小規模なBotであれば、とりあえず設定をオンにしておいて、すべてのintentsを許可にしておけばそうそう詰まることはなさそうです)
何のintentsが何のイベントに関連ついてるかわからないよ~!
インターネッツをさまよっていたら、「Discord Intents Calculator」なるサイトを見つけました。
右側のIntentsにチェックを入れると、何のイベントにアクセスできるか教えてくれます。

discord-intents-calculator.vercel.app
一応、公式ドキュメントからも参照できます。
コメント