不一致的py-如果表情符号出现在新创建的频道中,请删除该频道

时间:2020-10-27 08:27:39

标签: python discord discord.py discord.py-rewrite

嗨!

我正在尝试为我的服务器制作一个小型票务机器人-问题是反应中的表情符号会删除频道!

因此,如果成员在新创建的频道之外使用表情符号,它将删除频道:(

我的代码现在是什么样的:

@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
    guild_id = payload.guild_id
    guild = self.client.get_guild(guild_id)
    user_id = payload.user_id
    user = self.client.get_user(payload.user_id)
    message_id = payload.message_id
    emoji = payload.emoji.name

    if message_id == 768765161301213185 and emoji == "?":
        member = discord.utils.find(lambda m : m.id == payload.user_id, guild.members)
        support_role = guild.get_role(760792953718308915)
        category = guild.get_channel(768764177736400906)
        overwrites = {
            guild.default_role: discord.PermissionOverwrite(read_messages=False),
            member: discord.PermissionOverwrite(read_messages=True, send_messages=True),
            support_role: discord.PermissionOverwrite(read_messages=True, send_messages=True)
        }

        ticket_nr = random.randint(100,999)
        channel = await category.create_text_channel(f'ticket-{ticket_nr}', overwrites=overwrites)

        embed = discord.Embed(
            title="How can I help you?",
            description="Please wait for a supporter.")
        embed.set_author(name="TiLiKas Ticket Bot")

        for channel_all in guild.text_channels:
            if str(channel_all) == str(channel):
                if user_id != 739740219544305714 and emoji == "?":
                    await channel.delete(reason=None)
                else:
                    print("ERROR")

我想要什么?

我希望机器人仅在表情符号用于新创建的频道时响应它!

1 个答案:

答案 0 :(得分:0)

https://discordpy.readthedocs.io/en/latest/ext/commands/api.html?highlight=check#discord.ext.commands.Bot.wait_for

@client.event
async def on_message(message):
    if message.content.startswith('$thumb'):
        channel = message.channel
        await channel.send('Send me that ? reaction, mate')

        def check(reaction, user):
            return user == message.author and str(reaction.emoji) == '?'

        try:
            reaction, user = await client.wait_for('reaction_add', timeout=60.0, check=check)
        except asyncio.TimeoutError:
            await channel.send('?')
        else:
            await channel.send('?')

您的check方法应类似于:

def check(reaction, user):
    return user == message.author and str(reaction.emoji) == '?' and reaction.message.channel == message.channel

此检查在这里检查:

  • 对消息做出反应的用户与启动命令的用户相同。
  • 反应是表情符号。
  • 反应是在命令所在的同一通道中完成的。