You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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}")

关键修改说明

  1. 参数类型调整:将用户参数改为user_id: int,避开DMS无法解析discord.Member的问题,通过ID跨服务器定位成员。
  2. 服务器成员关联:先获取目标服务器,再通过服务器对象获取成员,确保操作绑定到正确的服务器上下文。
  3. 缓存+API双获取:先用get_member读本地缓存提升效率,缓存无数据时调用fetch_member从Discord API拉取最新成员信息。
  4. 权限与场景适配:明确基于服务器成员对象执行untimeout,确保Bot拥有目标服务器的「管理成员」权限才能成功执行。

内容的提问来源于stack exchange,提问作者OperationCryptic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:22:24