【问题标题】:on_raw_reaction_add is not working with ctx and its attribute "author"on_raw_reaction_add 不适用于 ctx 及其属性“作者”
【发布时间】:2021-03-21 14:42:14
【问题描述】:

嘿,我有这个问题,我不能使用 ctx 属性作者。所以我的问题是,是否有另一种方法可以在 discord.py 中创建与 on_reaction_add 一起使用的频道。

我的错误是: 忽略 on_raw_reaction_add 中的异常 Traceback(最近一次调用最后一次):

文件“C:\dev\Python\Einführung\venv\lib\site-packages\discord\client.py”,第 333 行,在 _run_event 等待 coro(*args, **kwargs)

文件“C:/Users/bmichs/Desktop/Ticketbot_Simon_2.py”,第 501 行,在 on_raw_reaction_add async def Vorgefertigtenachricht(ctx):

文件“C:/Users/bmichs/Desktop/Ticketbot_Simon_2.py”,第 439 行,在 berechtigung ticket_number = int(data["ticket-counter"])

AttributeError: 'RawReactionActionEvent' 对象没有属性 'author'

@bot.event
async def on_raw_reaction_add(ctx):
    with open("data.json") as f:
        data = json.load(f)
    user = ctx.author
    ticket_number = int(data["ticket-counter"])
    ticket_number += 1

    ticket_channel = await ctx.guild.create_text_channel("ticket-{}".format(ticket_number))
    await ticket_channel.set_permissions(ctx.guild.get_role(ctx.guild.id), send_messages=False,
                                             read_messages=False)
    for role_id in data["valid-roles"]:
        role = ctx.guild.get_role(role_id)

        await ticket_channel.set_permissions(role, send_messages=True, read_messages=True, add_reactions=True,
                                                 embed_links=True, attach_files=True, read_message_history=True,
                                                 external_emojis=True)

    await ticket_channel.set_permissions(user, send_messages=True, read_messages=True, add_reactions=True,
                                             embed_links=True, attach_files=True, read_message_history=True,
                                             external_emojis=True)

    await ticket_channel.set_permissions(user, send_messages=True, read_messages=True, add_reactions=True,
                                             embed_links=True, attach_files=True, read_message_history=True,
                                             external_emojis=True)
    em = discord.Embed(title="Ticket Erstellt von {}#{}".format(ctx.user.name, ctx.user.discriminator),
                           description="{}".format(message_content), color=0xf1c40f)
    em2 = discord.Embed(title="Guten Tag {}".format(ctx.user.name),
                            description="Willkommen im Ticket Support. Wir bitten dich dein Problem so ausführlich wie möglich uns mitzuteilen. Wir bitten dich ein wenig Geduld zu haben. \nWir werden dein Ticket so schnellst wie möglich bearbeiten.",
                            color=0xad1457)

    await ticket_channel.send(embed=em)
    await ticket_channel.send(embed=em2)

    pinged_msg_content = ""
    non_mentionable_roles = []

    if data["pinged-roles"] != []:

        for role_id in data["pinged-roles"]:
            role = ctx.guild.get_role(role_id)

            pinged_msg_content += role.mention
            pinged_msg_content += " "

            if role.mentionable:
                pass
            else:
                await role.edit(mentionable=True)
                non_mentionable_roles.append(role)

        await ticket_channel.send(pinged_msg_content)

        for role in non_mentionable_roles:
            await role.edit(mentionable=False)

    data["ticket-channel-ids"].append(ticket_channel.id)

    data["ticket-counter"] = int(ticket_number)
    with open("data.json", 'w') as f:
        json.dump(data, f)

    created_em = discord.Embed(title="Ticket Support:",
                                   description="Dein Ticket wurde erfolgreich erstellt! **{}**".format(
                                       ticket_channel), color=0xad1457)
    await ctx.send(embed=created_em)

【问题讨论】:

    标签: discord.py


    【解决方案1】:

    您可以使用on_raw_reaction_add,但这需要payload 而不是ctx

    这是一个示例,其中包含一些要使用的参数

    @bot.event
    async def on_raw_reaction_add(payload):
        channel = bot.get_channel(payload.channel_id)
        # skip DM messages
        if isinstance(channel, discord.DMChannel):
            return
    
        message = await channel.fetch_message(payload.message_id)
        guild = bot.get_guild(payload.guild_id)
        user = guild.get_member(payload.user_id)
        emoji = payload.emoji.name
        reaction = discord.utils.get(message.reactions, emoji=emoji)
    

    payload

    【讨论】:

    • 它有帮助,但我现在遇到了这个问题,因为我无法获取反应器名称来设置频道权限
    猜你喜欢
    • 2011-05-14
    • 2018-03-06
    • 1970-01-01
    • 2010-10-25
    • 2022-10-03
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    相关资源
    最近更新 更多