set_permissions работает корректно только на администраторах - PullRequest
0 голосов
/ 22 октября 2019

У меня проблема с моими командами set_permissions. Команда freeze в моем коде работает для каждого пользователя, но команда melt работает для каждого пользователя только в первый раз. Если ни у одного пользователя нет прав доступа к каналу, melt работает для всех, но когда используется freeze, melt прекрасно работает только для администраторов. Какое решение для этого?

@bot.command(name="freeze")
async def zamroz(ctx):
    try:
        if ctx.message.author.guild_permissions.value == 2146959359:
            for channel in ctx.guild.text_channels:
                for member in channel.members:
                    if member.bot == False:
                        await channel.set_permissions(member, read_messages=False, read_message_history=False)
        else:
            await ctx.send("Lack of permissions")
            await ctx.channel.last_message.delete(delay=2)
    except:
        pass

@bot.command(name="melt")
async def odmroz(ctx):
    try:
        if ctx.message.author.guild_permissions.value == 2146959359:
            for channel in ctx.guild.text_channels:
                for member in channel.members:
                    if member.bot == False:
                        await channel.set_permissions(member, overwrite=None)
        else:
            await ctx.send("Lack of permissions")
            await ctx.channel.last_message.delete(delay=2)
    except:
        pass

1 Ответ

0 голосов
/ 22 октября 2019

channel.members возвращает список всех участников, которые могут видеть канал.

Если вы используете команду freeze, вы забираете права всех участников (кроме бота) для чтения сообщений и истории сообщений из канала. Другими словами, они больше не видят канал.

Из-за этого при запуске команды melt channel.members не вернет ни одного члена, так как ни один участник не может видеть канал.

Замена этого на guild.members всегда возвращает всех участников сервера, независимо от того, видят ли они каналы или нет.

@bot.command(name="freeze")
async def zamroz(ctx):
    try:
        if ctx.message.author.guild_permissions.value == 2146959359:
            for channel in ctx.guild.text_channels:
                for member in ctx.guild.members:
                    if member.bot == False:
                        await channel.set_permissions(member, read_messages=False, read_message_history=False)
        else:
            await ctx.send("Lack of permissions")
            await ctx.channel.last_message.delete(delay=2)
    except:
        pass

@bot.command(name="melt")
async def odmroz(ctx):
    try:
        if ctx.message.author.guild_permissions.value == 2146959359:
            for channel in ctx.guild.text_channels:
                for member in ctx.guild.members:
                    if member.bot == False:
                        await channel.set_permissions(member, overwrite=None)
        else:
            await ctx.send("Lack of permissions")
            await ctx.channel.last_message.delete(delay=2)
    except:
        pass
...