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

Posted

技术标签:

【中文标题】Discord.py 重写 - 查看成员是不是被服务器静音,在 API 参考中找不到任何信息【英文标题】:Discord.py rewrite - looking to see if a member is server muted, no info found on API ReferenceDiscord.py 重写 - 查看成员是否被服务器静音,在 API 参考中找不到任何信息 【发布时间】:2019-11-16 14:02:05 【问题描述】:

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

【问题讨论】:

【参考方案1】:

正如您所说(据我所知),没有办法正确地使用 discord.py API 提供的函数静音服务器成员。您可以在语音聊天中将成员静音,但不能在文本频道中静音。

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

以下是一些示例,说明您可以采取哪些措施来回答您的问题:

静音角色:

因此,如果每次调用命令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:

希望对您有所帮助!

【讨论】:

我试图避免角色,但这没关系。 据我所知,您无法避免在这种特定情况下扮演角色。我可能是错的,但我从来没有找到其他方法来做到这一点。

以上是关于Discord.py 重写 - 查看成员是不是被服务器静音,在 API 参考中找不到任何信息的主要内容,如果未能解决你的问题,请参考以下文章

禁止命令 discord.py 的问题(重写分支)

检查用户的自定义状态(discord.py 重写)

无法在我的 for 循环中使用 add_roles discord.py 重写

如何让我的 discord.py 机器人只允许来自管理员和模组的 @everyone 和 @here,而不是来自普通成员的

Discord Bot 响应短语(Discord.py 重写)

Discord.py 以间隔将 dm 发送给多个特定成员