Как вы сказали (и, насколько мне известно), нет способа отключить член сервера должным образом с помощью функции, предоставляемой discord.py 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:
Надеюсь, это помогло!