Как мне получить каждый текстовый и голосовой канал и запретить @ всем его читать, а затем разрешить другой роли читать и отправлять?

Мне было интересно, как, когда бот добавлен в гильдию, я могу заставить его получать все текстовые и голосовые каналы, а затем запретить доступ @ всем для чтения, но затем разрешить другой роли с именем «Проверено» читать его?
Я используя перезаписанную версию Discord.py

РЕДАКТИРОВАТЬ: я нашел, как изменить разрешения, используя

await message.channel.set_permissions(message.author, read_messages=True, send_messages=False)

Но я до сих пор не знаю, как применить это на каждом канале.


person Tim Birtles    schedule 19.09.2018    source источник


Ответы (2)


Публикуйте это здесь для других, даже если вы получили ответ на Discord;)

Вам нужно будет перебрать каждый канал в гильдии через Guild.channels

person ryan broman    schedule 19.09.2018

Это изменит ситуацию только для пользователя, отправившего сообщение. Чтобы заблокировать всех, вы должны вместо этого установить разрешения для Guild.default_role. Приведенная ниже команда принимает существующую роль и любое количество участников. Он дает вызывающему и всем этим членам эту роль, а затем отключает чтение сообщений для всех без этой роли.

from discord.ext import commands
import discord

bot = commands.Bot(command_prefix='!')

@bot.command()
async def verify(ctx, role: discord.Role, *members: discord.Member):
    for member in (ctx.author, *members):
        await member.add_roles(role, reason=f"Verify command by {ctx.author.id}")
    for channel in ctx.guild.channels:
        await channel.set_permissions(ctx.guild.default_role, read_messages=False)
        await channel.set_permissions(role, read_messages=True)

bot.run("Token")
person Patrick Haugh    schedule 19.09.2018