Discord.py 重写 - 查看某个成员是否被服务器静音,API 参考中未找到任何信息

Discord.py rewrite - looking to see if a member is server muted, no info found on API Reference

如何查看 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

如您所说(据我所知),无法使用 [=] 提供的功能正确 静音 服务器成员53=]API。您可以在语音聊天中将成员静音,但不能在文本频道

中静音

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

以下是您可以如何回答问题的一些示例:

静音角色:

所以我们不想创建一个名为 "muted" 的角色,如果它在我们每次调用命令 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:

希望对您有所帮助!