0
votes

Hey I have this Problem where i can't use the ctx attribute author. So my Questen is, is there another way to create a channel in discord.py that works with on_reaction_add.

My Eror is: Ignoring exception in on_raw_reaction_add Traceback (most recent call last):

File "C:\dev\Python\Einführung\venv\lib\site-packages\discord\client.py", line 333, in _run_event await coro(*args, **kwargs)

File "C:/Users/bmichs/Desktop/Ticketbot_Simon_2.py", line 501, in on_raw_reaction_add async def Vorgefertigtenachricht(ctx):

File "C:/Users/bmichs/Desktop/Ticketbot_Simon_2.py", line 439, in berechtigung ticket_number = int(data["ticket-counter"])

AttributeError: 'RawReactionActionEvent' object has no attribute '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)
1

1 Answers

1
votes

You can use on_raw_reaction_add but that takes a payload not ctx

Here is an example with some parameters to use

@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