如何查看Member对象是否处于静音状态?我可以使用编辑()函数来静音,但是我想检索一个服务器上所有静音成员的列表。但是,如果我不能检查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发布于 2019-07-06 13:28:26
正如您所说的(我也知道),无法使用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:希望能帮上忙!
https://stackoverflow.com/questions/56911474
复制相似问题