つれづれなるままに日々の色々なことを綴ります

【Discord.py】TypeError: __init__() missing 1 required keyword-only argument: 'intents'というエラーが出る

はじめに

Discord botの改修作業をしていると、intents周りのエラーが出ました。直したのでメモを残しておきます。

プログラミング初心者につき、何か間違いあったらコメントお願いいたします。

開発環境

  • discord.py 2.1.0
  • python3 3.8.10

起きたこと

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)のコンストラクタに渡されます。

当方、猿以下なので、あんまり理解が及びませんでしたが・・・

zenn.dev

intentを指定しないことは、つまりそれに関するイベントを一切受信しなくなるようです。 標準的なインテントに関しては、デフォルトで渡すことができ、追加の許可や設定を必要としません。しかし、一部の特権的なintentsは、まずDiscord のDeveloper portal内で設定を必要とします。 (逆にいうと、個人開発レベルの小規模なBotであれば、とりあえず設定をオンにしておいて、すべてのintentsを許可にしておけばそうそう詰まることはなさそうです)

何のintentsが何のイベントに関連ついてるかわからないよ~!

インターネッツをさまよっていたら、「Discord Intents Calculator」なるサイトを見つけました。 右側のIntentsにチェックを入れると、何のイベントにアクセスできるか教えてくれます。

ディスコードインテンツ計算機

discord-intents-calculator.vercel.app

一応、公式ドキュメントからも参照できます。

まとめ

参考文献

teratail.com

discord.com