discord.py中get_guild在命令内失效,仅on_ready中可用问题求助
问题解决:Discord机器人get_guild()在命令中返回None
核心原因
最常见的问题是机器人未正确配置意图(Intents),导致服务器数据没有被缓存到机器人实例中。on_ready()事件触发时机器人刚完成初始化,可能还能临时获取到数据,但后续命令调用时缓存未同步,就会返回None。
解决方案
1. 配置正确的意图
在Discord开发者门户(机器人设置页面)开启GUILDS意图,然后在代码中显式声明:
import discord from discord.ext import commands # 初始化意图,开启服务器相关权限 intents = discord.Intents.default() intents.guilds = True # 传入意图创建机器人实例 Bot = commands.Bot(command_prefix="你的前缀", intents=intents)
2. 优先使用ctx.guild(更可靠)
既然命令是在目标服务器内触发的,直接通过上下文ctx获取当前服务器对象,无需手动传入ID:
@Bot.command() async def leaderboard(ctx): server = ctx.guild print(server) # 正常输出当前服务器信息
额外检查
- 确认机器人确实在目标服务器内,且拥有足够的权限
- 检查
my_sv_id是否为整数类型(Discord服务器ID必须是整数,不能是字符串)
内容的提问来源于stack exchange,提问作者CB developer
相关产品推荐
相关产品推荐

