Как сделать реакцию удаления канала в discord.py (перезаписать)? - PullRequest
2 голосов
/ 21 июня 2020

Итак, я сделал команду !vx new, которая создает новый канал со всеми установленными разрешениями автора и администраторов в определенной категории. Теперь я хочу создать команду, которая удаляет билет - !vx close. Это был код, который я понял, он работает, но проблема в том, что он может получить «Да» от любого пользователя в билете.

@client.command(name='close', aliases=['delete'])
@commands.has_permissions(administrator=True)
async def close(ctx):
    await ctx.send("Do you want to delete this channel?")

    @commands.Cog.listener()
    async def on_reaction_add(self, reaction, user: discord.Member):

        def check(reaction, user):
            name_list = []
            for emoji in reaction.message.reactions:
                name_list.append(emoji.emoji)

            return '✅' in name_list and reaction.message.author.id == MyBotID and reaction.message.content == "Do you want to delete this channel?" and user.guild_permissions.administrator

        if check(reaction, user):
            await ctx.send("K!")
            await ctx.channel.delete()

Я хочу, чтобы пользователь набрал !vx close реагировать крестиком / галочкой, которая закроет тикет, если автор отреагирует галочкой, и не закроет, если автор ответит крестиком.

EDIT - Вышеупомянутый код также не работает.

1 Ответ

2 голосов
/ 21 июня 2020

Вы можете получить объект Member из контекста функции (ctx) и сообщение из client.wait_for(). Таким образом, у вас может быть функция проверки:

return m.content.lower() == 'yes' and ctx.message.author == m.author

Для бита эмодзи вы можете поместить оператор if внутри события on_reaction_add, чтобы сказать что-то вроде «если сообщение от меня (бот ) И содержимое сообщения предназначено для завершения И реакция смайликов согласна И у пользователя есть права доступа «администратор» "

Код смайлика в соответствии с запросом: он будет выглядеть примерно так.

    @commands.Cog.listener()
    async def on_reaction_add(self, reaction, user : discord.Member):

        def check(reaction, user):
            name_list = []
            for emoji in reaction.message.reactions:
                name_list.append(emoji.emoji)

            return '✅' in name_list and reaction.message.author.id == yourBotsID and reaction.message.content == "Do you want to delete this channel?" and user.guild_permissions.administrator

        if check(reaction, user):
            await ctx.send("K!")
            await ctx.channel.delete()
...