@multiapi

Выдача прав доступа?

Добрая ночь.
Пытался сделать код, дабы при упоминании данной роли ей выдавались указанные права, но не понимаю, как это сделать.
Мой код, который получился
@client.command()
async def set_permissions(сtx, role: discord.Role = None):
	allvoice = guild.voice_channels
	alltext = guild.text_channels
	await alltext.set_permissions(role, read_messages = True, send_messages = True, manage_channels = True, manage_roles = True)
	await allvoice.set_permissions(role, connect = True, manage_channels = True, manage_roles = True)
	await ctx.send(f'{ctx.author.mention}, вы успешно установили {role.mention} права доступа во всех текстовых/голосовых каналах')
  • Вопрос задан
  • 140 просмотров
Решения вопроса 1
Две основные проблемы:
  1. Переменная guild не определена. В данном случае Вы, скорее всего, хотите получить её из контекста - ctx.guild
  2. Guild.voice_channels и Guild.text_channels - "списки" (list) с каналами соответствующего типа. Списки не имеют атрибута set_permissions. Данный атрибут есть у каналов в списке. Для установки прав для каждого канала нужно данный список итерировать.


@client.command()
async def set_permissions(сtx, role: discord.Role):
    for textchannel in ctx.guild.text_channels:
        await alltext.set_permissions(
            role,
            read_messages=True,
            send_messages=True,
            manage_channels=True,
            manage_roles=True,
        )
    for voicechannel in ctx.guild.voice_channels:
        await allvoice.set_permissions(
            role, connect=True, manage_channels=True, manage_roles=True
        )
    await ctx.send(
        f"{ctx.author.mention}, вы успешно установили {role.mention} права доступа во всех текстовых/голосовых каналах"
    )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@xzartsust
Учусь
Ну у вас же в консоле написано что не находить guild
Попробуйте так:
@client.command()
async def set_permissions(сtx, role: discord.Role = None):
  guild = ctx.message.guild #определяем сервера на котором была использована эта команда
  allvoice = guild.voice_channels
  alltext = guild.text_channels
  await alltext.set_permissions(role, read_messages = True, send_messages = True, manage_channels = True, manage_roles = True)
  await allvoice.set_permissions(role, connect = True, manage_channels = True, manage_roles = True)
  await ctx.send(f'{ctx.author.mention}, вы успешно установили {role.mention} права доступа во всех текстовых/голосовых каналах')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы