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_role
和 set_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!**")
因此,我正在尝试创建一个全局静音/取消静音命令,用于将多个服务器中的特定用户静音。此命令仅适用于拥有多个服务器的社区,因此在机器人 运行.
的所有服务器上将某人静音会很有用我将此静音命令基于全局禁止命令,该命令能够禁止用户访问机器人所在的多个服务器 运行。
下面代码中的第一个命令“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_role
和 set_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!**")