首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“不和”全球滑轮指挥

“不和”全球滑轮指挥
EN

Stack Overflow用户
提问于 2022-01-27 15:38:32
回答 1查看 161关注 0票数 -1

因此,我正在尝试创建一个全局静音/ unmute命令,该命令将用于在多个服务器中静音特定用户。此命令只针对拥有多个服务器的社区,因此在机器人运行的所有服务器上静音是有用的。

我将这个静音命令建立在全局ban命令的基础上,该命令能够禁止用户从运行机器人的多个服务器上运行。

下面代码中的第一个命令"gban“运行得很好,每当我在一台服务器中禁止用户时,它就会禁止它们从机器人正在运行的任何其他服务器上运行。我试图了解如何使用相同的设置来创建一个全局静音命令。到目前为止,命令"gmute“是我创建的。它可以工作,但它只会在运行命令的服务器中静音,而不会在机器人运行的所有服务器中静音用户。我试图将"gmute“应用到”gmute“是一个全局命令的位置,并将其应用于所有正在运行的机器人服务器。

代码语言:javascript
复制
# 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!**") ```
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-27 17:25:51

您必须在循环中进行add_roles

你的压痕是错的。if not mutedRole:部件也应该在循环中。

您正在ctx.guild中创建一个新的静音角色(命令是在guild中执行的),而不是在guild中创建(您从循环中获得的公会)。

另外,如果您创建了一个新的静音角色,您将只在角色所在的公会中设置它的权限,而不是在所有服务器中设置它的权限。不必执行2个api调用(create_roleset_permissions),只需在create_role中使用permissions关键字参数即可。所以而不是

代码语言:javascript
复制
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)

你会这么做

代码语言:javascript
复制
mutedRole = await ctx.guild.create_role(name="Coventry", permissions=discord.Permissions(speak=False, send_messages=False, read_message_history=True, read_messages=False))

你的最终代码是

代码语言:javascript
复制
@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!**")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70881385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档