Discord py 全局静音命令

Discord py Global Mute command

因此,我正在尝试创建一个全局静音/取消静音命令,用于将多个服务器中的特定用户静音。此命令仅适用于拥有多个服务器的社区,因此在机器人 运行.

的所有服务器上将某人静音会很有用

我将此静音命令基于全局禁止命令,该命令能够禁止用户访问机器人所在的多个服务器 运行。

下面代码中的第一个命令“gban”运行得很好,每当我在一个服务器中禁止用户时,它就会禁止他们访问机器人 运行 所在的任何其他服务器。我想看看如何我可以使用相同的设置来创建全局静音命令。命令“gmute”是我到目前为止创建的。它有效,但它只会使服务器中的用户静音命令是 运行 并且不会使机器人在 运行 中的所有服务器中的用户静音。我正在尝试将它带到哪里“gmute”是一个全局命令,适用于机器人 运行 所在的所有服务器。

# global ban command

async def gban(ctx, user: discord.User):
  for guild in client.guilds:
    await guild.ban(user)
    embed = discord.Embed(title="**Global Ban:**", description=f"{user} Has been globally banned from all servers!:no_pedestrians:",colour=discord.Colour.light_gray())
    await ctx.send(embed = embed)


# Global Mute Command

@client.command()
@commands.has_permissions(manage_messages=True)
async def gmute(ctx, user: discord.User):
    for guild in client.guilds:
        mutedRole = discord.utils.get(guild.roles, name="Coventry")

    if not mutedRole:
        mutedRole = await ctx.guild.create_role(name="Coventry")

        for guild in client.guilds:
            await guild.set_permissions(mutedRole, speak=False, send_messages=False, read_message_history=True, read_messages=False)
    embed = discord.Embed(title="**Global Mute:**", description=f"**{user} has been globablly muted frm all servers! :zipper_mouth:**", colour=discord.Colour.light_gray())
    await ctx.send(embed=embed)
    await user.add_roles(mutedRole)
    await user.send(f"**you have been globally muted!**") ```

你必须 add_roles 循环中。
你的缩进是错误的。 if not mutedRole: 部分也应该在循环内。
您正在 ctx.guild(执行命令的公会)而不是 guild(您从循环中获得的公会)
中创建新的静音角色 此外,如果您创建一个新的静音角色,您将只在角色所在的公会中设置它的权限,而不是在所有服务器中。您可以只使用 create_role 中的 permissions 关键字参数,而不是执行 2 个 api 调用(create_roleset_permissions)。所以而不是

mutedRole = await ctx.guild.create_role(name="Coventry")

for guild in client.guilds:
    await guild.set_permissions(mutedRole, speak=False, send_messages=False, read_message_history=True, read_messages=False)

你会的

mutedRole = await ctx.guild.create_role(name="Coventry", permissions=discord.Permissions(speak=False, send_messages=False, read_message_history=True, read_messages=False))

您的最终代码将是

@client.command()
@commands.has_permissions(manage_messages=True)
async def gmute(ctx, user: discord.User):
    for guild in client.guilds:
        mutedRole = discord.utils.get(guild.roles, name="Coventry")

        if not mutedRole:
            mutedRole = await guild.create_role(name="Coventry", permissions=discord.Permissions(speak=False, send_messages=False, read_message_history=True, read_messages=False))

        member = guild.get_member(user.id)
        await member.add_roles(mutedRole)

    embed = discord.Embed(title="**Global Mute:**", description=f"**{user} has been globablly muted frm all servers! :zipper_mouth:**", colour=discord.Colour.light_gray())
    await ctx.send(embed=embed)
    await user.send(f"**you have been globally muted!**")