如何通过Discord DMS对用户执行Untimeout操作?
如何在Discord DMS中对用户执行Untimeout操作?
首先明确核心逻辑:Discord的Timeout(超时惩罚)是服务器级别的操作,只能针对特定服务器内的成员执行——哪怕命令在DMS中发起,也必须关联到目标服务器才能生效。
你的原代码存在两个关键问题:
- 在DMS上下文里,
discord.Member类型参数无法被正确解析,因为DMS没有服务器成员的上下文,Bot无法直接将用户识别为某服务器的成员。 - 调用
user.untimeout()时未指定服务器上下文,DMS环境下没有默认服务器,必然触发错误。
修正后的代码实现
@bot.command() async def untimeout(ctx, user_id: int, guild_id: int): # 获取目标服务器 guild = bot.get_guild(guild_id) if not guild: await ctx.send("未找到指定服务器。") return # 通过用户ID获取服务器内的成员对象(先读缓存,缓存无则调用API) try: member = guild.get_member(user_id) or await guild.fetch_member(user_id) except Exception as e: await ctx.reply(f"获取成员信息失败:{e}") return # 执行Untimeout操作 try: await member.untimeout() await ctx.reply(f"已解除用户 {member.name} 在服务器 {guild.name} 中的超时惩罚。") except Exception as e: await ctx.reply(f"解除超时失败:{e}")
关键修改说明
- 参数类型调整:将用户参数改为
user_id: int,避开DMS无法解析discord.Member的问题,通过ID跨服务器定位成员。 - 服务器成员关联:先获取目标服务器,再通过服务器对象获取成员,确保操作绑定到正确的服务器上下文。
- 缓存+API双获取:先用
get_member读本地缓存提升效率,缓存无数据时调用fetch_member从Discord API拉取最新成员信息。 - 权限与场景适配:明确基于服务器成员对象执行
untimeout,确保Bot拥有目标服务器的「管理成员」权限才能成功执行。
内容的提问来源于stack exchange,提问作者OperationCryptic
相关产品推荐
相关产品推荐

