Python开发Discord Bot启动报错:缺少intents参数求助
Discord Bot 运行报错:缺少intents参数的解决方法
我正在开发Discord Bot以测试和提升Python能力,按照教程编写了如下代码:
main.py
#main.py import bot if __name__ == '__main__': bot.run_discord_bot()
responses.py
#responses.py import random def handle_response(message) -> str: p_message = message.lower() if p_message == "hello": return "Hi" if p_message == "roll": return str(random.randint(1,2)) if p_message == "!help": return "This is a help message."
bot.py(原错误代码)
#bot.py import discord import responses async def send_message(message, user_message, is_private): try: response = responses.handle_response(user_message) await message.author.send(response)if is_private else await message.chanel.send(response) except Exception as e: print(e) def run_discord_bot(): TOKEN = '################################################################' client = discord.Client() @client.event async def on_ready(): print(f'{client.user} is now runing!') @client.event async def on_message(message): if message.author == client.user: return username = str(message.author()) user_message = str(message.content) channel = str(message.channel) if user_message[0] == "?": user_message = user_message[1:] await send_message(message, user_message, is_private = True) else: await send_message(message, user_message, is_private = False) client.run(TOKEN)
运行代码时出现如下报错:
Traceback (most recent call last): File "c:\Users\#####\Desktop\Python Scripts\Discor_Bot\main.py", line 4, in <module> bot.run_discord_bot() File "c:\Users\#####\Desktop\Python Scripts\Discor_Bot\bot.py", line 13, in run_discord_bot client = discord.Client() TypeError: Client.__init__() missing 1 required keyword-only argument: 'intents' PS C:\Users\#####\Desktop\Python Scripts\Discor_Bot>
错误原因与解决方法
核心错误原因
Discord.py v2.0+版本开始,创建discord.Client实例必须传入intents参数,这是Discord API的强制要求,用于明确机器人需要接收哪些事件权限(比如读取消息、成员变动等)。你参考的教程可能基于旧版本的Discord.py,所以没有这部分配置。
具体修复步骤
配置Intents参数
在bot.py中添加intents的初始化代码,开启消息内容读取权限(因为你的机器人需要处理用户消息):intents = discord.Intents.default() intents.message_content = True然后创建Client时传入该参数:
client = discord.Client(intents=intents)修复代码中的其他小错误
message.chanel拼写错误,改为message.channelstr(message.author())多了括号,改为str(message.author)(message.author是对象,不是方法)- 原
responses.py中的判断条件是"Hello"、"Roll",但代码里转成了小写p_message = message.lower(),所以要把判断条件改成小写"hello"、"roll",否则无法匹配
修改后的完整bot.py代码
#bot.py import discord import responses async def send_message(message, user_message, is_private): try: response = responses.handle_response(user_message) await message.author.send(response) if is_private else await message.channel.send(response) except Exception as e: print(e) def run_discord_bot(): TOKEN = '################################################################' # 配置intents intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) @client.event async def on_ready(): print(f'{client.user} is now running!') # 修正拼写runing->running @client.event async def on_message(message): if message.author == client.user: return username = str(message.author) user_message = str(message.content) channel = str(message.channel) if user_message.startswith("?"): user_message = user_message[1:] await send_message(message, user_message, is_private=True) else: await send_message(message, user_message, is_private=False) client.run(TOKEN)
额外注意
你需要在Discord开发者门户的机器人设置中,开启Message Content Intent权限(在"Privileged Gateway Intents"部分),否则机器人无法读取用户消息内容。
内容的提问来源于stack exchange,提问作者0RD3R
相关产品推荐
相关产品推荐

