如何在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
相关产品推荐
相关产品推荐

