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

Python开发Discord机器人调用Member.edit()遇参数错误求助

问题解决:Discord机器人Mute命令参数错误

错误原因

你遇到的Member.edit() got an unexpected keyword argument问题,本质是discord.py版本差异导致的参数命名不一致:

  • discord.py v1.x版本使用timeout参数,接收timedelta类型的时长
  • discord.py v2.x及以上版本使用communication_disabled_until参数,接收datetime类型的结束时间

分步解决方案

1. 确认你的discord.py版本

在终端执行以下命令查看当前版本:

pip show discord.py

2. 根据版本修改代码

情况A:discord.py v1.x版本

v1.x没有is_timed_out()方法,且需要用timeout参数传递时长:

@bot.hybrid_command(name="mute", description="Time out a member in the server.")
@app_commands.describe(member="The member to time out", duration="Time out duration in minutes", reason="Reason for the time out")
@commands.has_permissions(moderate_members=True)
async def mute(ctx, member: discord.Member, duration: int, *, reason: str = "No reason provided"):
    # 替换原is_timed_out()判断逻辑
    if member.timed_out_until is not None and member.timed_out_until > datetime.utcnow():
        await send_embed(ctx, "Error", f"{member.display_name} is already timed out.")
        return
    
    try:
        # 使用timeout参数,传递timedelta时长
        await member.edit(timeout=timedelta(minutes=duration), reason=reason)
        await send_embed(ctx, "Success", f"{member.display_name} has been timed out for {duration} minutes. Reason: {reason}")
    except Exception as e:
        await send_embed(ctx, "Error", f"Failed to time out {member.display_name}. Error: {str(e)}")

情况B:discord.py v2.x及以上版本

确保代码中正确导入datetime和timedelta,且使用communication_disabled_until参数:

# 确保顶部导入
from datetime import datetime, timedelta

@bot.hybrid_command(name="mute", description="Time out a member in the server.")
@app_commands.describe(member="The member to time out", duration="Time out duration in minutes", reason="Reason for the time out")
@commands.has_permissions(moderate_members=True)
async def mute(ctx, member: discord.Member, duration: int, *, reason: str = "No reason provided"):
    if member.is_timed_out():
        await send_embed(ctx, "Error", f"{member.display_name} is already timed out.")
        return
    
    end_time = datetime.utcnow() + timedelta(minutes=duration)
    
    try:
        await member.edit(communication_disabled_until=end_time, reason=reason)
        await send_embed(ctx, "Success", f"{member.display_name} has been timed out for {duration} minutes. Reason: {reason}")
    except Exception as e:
        await send_embed(ctx, "Error", f"Failed to time out {member.display_name}. Error: {str(e)}")

如果仍报错,执行命令升级到最新稳定版:

pip install --upgrade discord.py

3. 额外检查

  • 确保机器人在服务器中拥有超时成员(Moderate Members)权限
  • 确认目标成员的权限等级低于机器人,避免无法操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:33:32