因此,我正在尝试创建一个全局静音/ unmute命令,该命令将用于在多个服务器中静音特定用户。此命令只针对拥有多个服务器的社区,因此在机器人运行的所有服务器上静音是有用的。
我将这个静音命令建立在全局ban命令的基础上,该命令能够禁止用户从运行机器人的多个服务器上运行。
下面代码中的第一个命令"gban“运行得很好,每当我在一台服务器中禁止用户时,它就会禁止它们从机器人正在运行的任何其他服务器上运行。我试图了解如何使用相同的设置来创建一个全局静音命令。到目前为止,命令"gmute“是我创建的。它可以工作,但它只会在运行命令的服务器中静音,而不会在机器人运行的所有服务器中静音用户。我试图将"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!**") ```发布于 2022-01-27 17:25:51
您必须在循环中进行add_roles。
你的压痕是错的。if not mutedRole:部件也应该在循环中。
您正在ctx.guild中创建一个新的静音角色(命令是在guild中执行的),而不是在guild中创建(您从循环中获得的公会)。
另外,如果您创建了一个新的静音角色,您将只在角色所在的公会中设置它的权限,而不是在所有服务器中设置它的权限。不必执行2个api调用(create_role和set_permissions),只需在create_role中使用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!**")https://stackoverflow.com/questions/70881385
复制相似问题