Discord.py rewrite - ищет, не отключен ли сервер, информация об API Reference не найдена - PullRequest
0 голосов
/ 06 июля 2019

Как мне посмотреть, не отключен ли объект 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 Ответ

0 голосов
/ 06 июля 2019

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

Надеюсь, это помогло!

...