Discord.py中client.run()位置错误导致无输出问题求助
问题排查与修复方案
你的代码存在几个关键问题,导致运行后无任何输出:
1. client.run(TOKEN)位置错误
client.run()是启动Discord客户端的核心方法,你把它放在了on_ready事件函数内部——事件函数只有在客户端成功连接后才会触发,这就形成了逻辑死循环:客户端需要run()启动才能触发on_ready,但run()却要等on_ready触发才执行,最终客户端永远无法正常启动。
2. Intents配置不匹配
你创建了intents = discord.Intents.all()但未应用到client实例,反而使用了discord.Intents.default()。而要获取服务器成员列表,必须开启members意图,同时需要在Discord开发者后台的机器人页面开启服务器成员特权网关意图。
3. 冗余实例创建
你同时初始化了client = discord.Client()和bot = commands.Bot(),但实际只使用了client,冗余代码会增加不必要的内存占用。
修复后的完整代码
import os import discord from dotenv import load_dotenv load_dotenv() TOKEN = os.getenv("TOKEN") GUILD = os.getenv("GUILD") # 配置完整Intents,确保能获取成员信息 intents = discord.Intents.all() client = discord.Client(intents=intents) discordVersion = discord.__version__ discordVersionInfo = discord.version_info @client.event async def on_ready(): # 更高效的服务器获取方式 guild = discord.utils.get(client.guilds, name=GUILD) if not guild: print(f"未找到名为{GUILD}的服务器") return print( f'{client.user} 已连接到服务器\n' f'{guild.name}(ID: {guild.id})') members = '\n - '.join([member.name for member in guild.members]) print(f'服务器成员列表:\n - {members}' f'\n Discord.py版本: {discordVersion}' f'\n 版本详情: {discordVersionInfo}') print(f'{client.user} 连接完成\n') # 将启动方法放在全局作用域,作为程序入口 client.run(TOKEN)
额外注意事项
- 登录Discord开发者平台,找到你的机器人应用,在「Privileged Gateway Intents」下开启Server Members Intent,否则无法获取成员列表。
- 确认
.env文件中的TOKEN和GUILD值准确无误,GUILD需与服务器名称完全一致(区分大小写)。
内容的提问来源于stack exchange,提问作者S.U.S
相关产品推荐
相关产品推荐

