我该如何查看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:
希望它能有所帮助!