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

如何在discord.py中实现与现有mute命令对应的unmute解除禁言功能

%unmute 命令实现方案

执行逻辑说明

  • 权限校验:和mute命令保持一致,要求调用者拥有manage_messages(管理消息)权限
  • 参数解析:接收被@的目标用户,支持可选传入解除禁言的理由
  • 角色校验:先查询当前服务器是否存在Muted角色,如果不存在直接返回提示;再校验目标用户是否持有该角色,未持有也返回对应提示
  • 执行操作:移除目标用户的Muted角色,发送操作成功提示,可选给被解除禁言的用户发送私信通知
  • 权限注意:需要确保机器人的角色排序高于Muted角色,且拥有「管理角色」权限,否则会执行失败

完整代码实现

@commands.has_permissions(manage_messages=True)
@bot.command(name='unmute', help='解除指定用户的禁言状态,需要管理消息权限')
async def unmute(ctx, member: discord.Member, *, reason=None):
    guild = ctx.guild
    mutedRole = discord.utils.get(guild.roles, name="Muted")

    # 服务器不存在Muted角色的情况处理
    if not mutedRole:
        await ctx.send("当前服务器未创建Muted禁言角色,没有用户处于禁言状态")
        return
    
    # 目标用户没有被禁言的情况处理
    if mutedRole not in member.roles:
        await ctx.send(f"{member.mention} 当前并未处于禁言状态")
        return

    # 执行解除禁言操作
    await member.remove_roles(mutedRole, reason=reason)
    
    # 发送操作成功提示
    embed = discord.Embed(title="解除禁言", description=f"{member.mention} 已被解除禁言", colour=discord.Colour.light_gray())
    embed.add_field(name="解除理由:", value=reason if reason else "未填写理由", inline=False)
    await ctx.send(embed=embed)
    
    # 给被解除禁言的用户发送私信通知
    await member.send(f"你已被解除在 {guild.name} 的禁言,解除理由:{reason if reason else '未填写理由'}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 21:51:03