discord.py重写 - 寻找成员是否被服务器静音,在API参考上找不到信息



我该如何查看Member对象是否被服务器静音?我可以使用edit((函数将它们静音,但是我想检索静音服务器所有成员的列表。但是,如果我不能进行检查以查看Member对象是否被静音。

还如何更改用户的权限,以便他们无法发送消息(静音函数(

if ctx.author.is_muted(): # <<< Goal :) Not a real function
    await ctx.author.edit(mute=False) # Is a real function, only works on voice connection.
else:
    pass

正如您所说的(我知道(,无法使用 server 使用由 discord提供的函数正确的服务器成员.py api 。您可以在语音聊天中静音文本频道。

避免用户到发送消息的唯一方法是创建静音角色并更改所有频道perms。

以下是您可以做些什么来回答您的问题的例子:

静音角色:

因此,如果我们每次调用命令 mute @user

,我们就不会创建一个称为"静音"的角色。
import discord, asyncio
from discord.utils import get
async def create_mute_role(guild):
   '''
   `guild` : must be :class:`discord.Guild`
   '''
   role_name = "muted"
   mute_role = get(guild.roles, name = role_name)  # allows us to check if the role exists or not
   # if the role doesn't exist, we create it
   if mute_role is None:
      await guild.create_role(name = role_name)
      mute_role = get(guild.roles, name = role_name)  # retrieves the created role
   # set channels permissions
   for channel in guild.text_channels:
      await asyncio.sleep(0)
      mute_permissions = discord.PermissionsOverwrite()
      mute_permissions.send_messages = False
      await channel.set_permissions(mute_role, overwrite = mute_permissions)
   return(mute_role)

您的mute @user命令将执行以下操作:

@commands.command()
async def mute(self, ctx, member: discord.Member):
   guild = ctx.message.guild
   mute_role = await create_mute_role(guild)
   await member.add_roles(mute_role)
   await ctx.send(f"{member.name} has been muted !")
   return

获得静音成员:

要获取服务器静音成员的列表,您要使用role.members

这样做:

muted_list = mute_role.members
print(len(muted_list))

将显示静音成员的数量,您可以使用以下清单浏览以下列表。

for member in muted_list:

希望它能有所帮助!

最新更新