Discord Bot报错:Client.__init__缺少必填关键字参数'intents'求助
Discord机器人报错:
TypeError: Client.__init__() missing 1 required keyword-only argument: 'intents' 解决方法 问题原因
这是因为discord.py(你导入的discord库)在v2.0版本后强制要求声明网关意图(Intents)。Discord官方为提升平台安全性和性能,要求所有机器人必须明确指定需要接收的事件类型,旧版本的discord.py不需要显式配置这一参数,所以你的代码之前能正常运行,库更新后就触发了这个错误。
修复方案
1. 修改代码添加Intents配置
需要在实例化discord.Client前创建并配置Intents对象,开启机器人所需的权限,具体修改后的代码如下:
import discord import os from dotenv import load_dotenv from neuralintents import GenericAssistant chatbot = GenericAssistant('intents.json') chatbot.train_model() chatbot.save_model() # 新增:配置机器人需要的网关意图 intents = discord.Intents.default() intents.message_content = True # 必须开启,否则机器人无法读取消息内容 # 实例化Client时传入intents参数 client = discord.Client(intents=intents) load_dotenv() TOKEN = os.getenv('TOKEN') # 建议移除硬编码的TOKEN,直接使用环境变量,避免泄露 # TOKEN = "my token" @client.event async def on_message(message): if message.author == client.user: return if message.content.startswith("!"): # 修正切片逻辑:[1:]才能获取!之后的完整命令,之前的[2:]会丢失第一个字符 response = chatbot.request(message.content[1:]) await message.channel.send(response) client.run(TOKEN)
2. 在Discord开发者后台开启对应权限
除了代码修改,你还需要手动在Discord开发者平台操作:
- 找到你的机器人应用,进入"Bot"页面
- 下滑到"Privileged Gateway Intents"区域
- 开启"Message Content Intent"开关并保存设置
额外提示
- 不要硬编码机器人TOKEN,始终使用环境变量管理,避免TOKEN泄露导致机器人被滥用
- 原代码中
message.content[2:]存在逻辑错误,若输入!hello,[2:]会得到ello,改用[1:]才能获取!之后的完整命令内容
内容的提问来源于stack exchange,提问作者Savantik
相关产品推荐
相关产品推荐

