启动Discord.py机器人遭遇Intents错误,寻求解决方案
Discord.py Intents问题排查与修复
问题说明
三个多月未编码,启动Discord.py机器人时遭遇Intents相关错误,无法正常运行机器人。错误核心为Discord网关要求显式声明所需的Intents权限,当前代码未配置相关参数,且未在开发者门户启用特权Intents。
代码问题分析
当前机器人初始化代码未指定intents参数,Discord.py v1.5+版本默认仅启用基础Intents,无法获取消息内容、成员列表等敏感数据,触发权限错误。此外代码缺少os模块导入,会导致TOKEN读取失败。
修复步骤
1. 在Discord开发者门户启用特权Intents
打开Discord开发者门户,进入你的机器人应用页面,切换到「Bot」标签页,在「Privileged Gateway Intents」区域,开启「Server Members Intent」和「Message Content Intent」开关并保存设置。
2. 修改机器人代码
补充缺失的导入
添加os和discord模块的导入:
import os import discord
配置Intents并初始化Bot
修改Bot初始化代码,添加Intents配置:
# 创建Intents实例,启用所需权限 intents = discord.Intents.default() intents.message_content = True # 启用消息内容读取权限(处理命令必备) intents.members = True # 若需要成员相关功能,启用此权限 client = commands.Bot(command_prefix='!', case_insensitive=True, owner_ids=(Id place holder1, id placeholder2), intents=intents) # 传入Intents参数
完整修正后的代码
import os import discord import datetime import traceback import math from datetime import datetime from discord.ext.commands.cooldowns import BucketType from discord.ext.commands import CommandOnCooldown, errors, clean_content, guild_only from discord.ext import commands, tasks from random import choice, randint from colorama import Fore import keep_alive from discord.ext.commands import has_permissions, MissingPermissions, CheckFailure keep_alive.keep_alive() # 配置Intents intents = discord.Intents.default() intents.message_content = True intents.members = True client = commands.Bot(command_prefix='!', case_insensitive=True, owner_ids=(Id place holder1, id placeholder2), intents=intents) client.remove_command("help") dev_ids = [id placeholder3] def date(target, clock=True): """ Clock format using datetime.strftime() """ if not clock: return target.strftime("%d %B %Y") return target.strftime("%d %B %Y, %H:%M") def traceback_maker(err, advance: bool = True): _traceback = ''.join(traceback.format_tb(err.__traceback__)) error = ('```py\n{1}{0}: {2}\n```').format(type(err).__name__, _traceback, err) return error if advance else f"{type(err).__name__}: {err}" @client.command() async def test(ctx): await ctx.send("OMG!!! THIS IS A TEST !!!") TOKEN = os.environ.get("TOKEN") if TOKEN: print('Get real') else: print("Looks like you're not the owner dumb dumb") client.run(TOKEN)
关键说明
message_contentIntents是处理文本命令的必要权限,必须在开发者门户和代码中都启用- 若机器人不需要成员相关功能(如欢迎新成员),可移除
intents.members = True,但仍需保证message_content启用 - 确保开发者门户中机器人的特权Intents开关已开启,否则代码配置也无法生效
内容的提问来源于stack exchange,提问作者Oreo Senpai
相关产品推荐
相关产品推荐

