【问题标题】:(Discord Bot) on_raw_reaction_add(payload) problems (Ticket System)(Discord Bot) on_raw_reaction_add(payload) 问题 (Ticket System)
【发布时间】:2020-08-04 18:54:28
【问题描述】:

嘿,我正在用 Python 开发一个 Discord Bot。这是文档:https://discordpy.readthedocs.io/en/latest/index.html

我会问一个问题。我在 Python 中制作了一个不和谐的机器人,我需要帮助:

  1. 是否可以在我可以关联的不和谐机器人中实现功能?我想在事件 on_raw_reaction_add 中包含整个票务系统。这甚至可能吗?如果这是不可能的,那么如何引用给定的票证?

  2. 我想在票务系统中包含一个条件。创建票证时,用户获得等级“A”。如果他已经有这个等级,机器人会写信给他,说他已经创建了一张票,将无法再创建一张票。有谁知道如何检查用户是否有排名?我知道@command.has_role 存在,但这不适用于某个条件。

这是我的代码:

@client.event
async def on_raw_reaction_add(payload):
        message_id = payload.message_id
        if message_id == 701490140110913568:
                guild_id = payload.guild_id
                guild = discord.utils.find(lambda g : g.id == guild_id, client.guilds)
                if payload.emoji.name == 'koperta':
                                print("zlotek")
                                channel = client.get_channel(payload.channel_id)
                                message = await channel.fetch_message(payload.message_id)
                                user = client.get_user(payload.user_id)
                                emoji = client.get_emoji(700845595103068211)
                                await message.remove_reaction(emoji, user)
                                name = '✅ OPENED TICKETS ✅'
                                category = discord.utils.get(guild.categories, name=name)
                                overwrites = overwrites = {
                                guild.default_role: discord.PermissionOverwrite(read_messages=False),
                                guild.me: discord.PermissionOverwrite(read_messages=True)
                                }
                                await guild.create_text_channel(f'Ticket-0001', category=category, overwrites=overwrites)
                                role = discord.utils.get(guild.roles, name='A')
                                member = discord.utils.find(lambda m : m.id == payload.user_id, guild.members)
                                await member.add_roles(role)

感谢您提供各种形式的帮助。你是最棒的

【问题讨论】:

  • 您是否尝试过数据存储,例如使用 JSON 并检查 JSON 文件中的用户数据,当创建票证时,您可以将数据转储到 JSON 文件中,其中包含一些信息,例如用户 ID,以及也许该票的唯一标识符?我做了一个票务系统,这就是我所做的。

标签: python discord discord.py-rewrite


【解决方案1】:

使用这个

@bot.event
async def on_reaction_add(reaction, user):

  if user.id != 858515419363147807:
    guild = reaction.message.guild
    global confirmation
    channelexsits = discord.utils.get(guild.text_channels, name=user.name.lower().replace("#",""))
    if channelexsits:
      None
    else:
      botrolle = discord.utils.get(guild.roles, id=858515574992404491)

    if reaction.emoji == '?️':
      category = discord.utils.get(guild.categories, id=888944156062396426)
      channel = await guild.create_text_channel(name=f"╠▹?{user.name}", category=category)
      await channel.set_permissions(user,read_messages=True, send_messages=True)
      embed = discord.Embed(title=f"`{user.guild.name}`", description=f"> Hallo, {user.mention}!\n> Du hast ein Ticket erstellt wie kann ich dir helfen?\n\n> Um das Ticket zu schließen drücke ?.", color=random.choice (Farben))
      embed.set_thumbnail(url=f"{user.guild.icon_url}")
      embed.set_footer(text=f"{user.guild.name}",icon_url=f"{user.guild.icon_url}")
      embed.timestamp = datetime.utcnow()
      message = await channel.send(embed=embed)
      await message.add_reaction('?')

    if reaction.emoji == '?': 
      embed = discord.Embed(title=f"`{user.guild.name}`", description=f"{user.mention} Willst du dein Ticket wirklich schließen?", color=random.choice (Farben))
      embed.set_footer(text=f"{user.guild.name}",icon_url=f"{user.guild.icon_url}")
      embed.timestamp = datetime.utcnow() 
      confirmation = await reaction.message.channel.send(embed=embed)
      await confirmation.add_reaction('✅')
      await confirmation.add_reaction('❌')

    if reaction.emoji == '✅':
      await reaction.message.channel.delete(reason=None)

    if reaction.emoji == '❌':
      message = await reaction.message.channel.fetch_message(confirmation.id)
      await message.delete()  

@bot.command()
@commands.has_permissions(manage_messages=True)
async def close(ctx, *, grund:str):
  membert = discord.utils.get(ctx.channel.members, discriminator=f"{ctx.channel.name[0:4]}")
  embed = discord.Embed(title="`Hinweis!`", color=random.choice (Farben))

  if ctx.channel.category.name == "Tickets":
    filename = f"{ctx.channel.name}.txt"

    with open(filename, "w") as file:
      async for msg in ctx.channel.history(limit=None,oldest_first=True):
        zeit = msg.created_at.strftime("%d/%m/%Y, %H:%M")
        file.write(f"{zeit} - {msg.author} >> {msg.clean_content}\n")

    with open(filename, "rb") as file:
      embed.set_author(name=f"{ctx.guild.name}")
      embed.set_thumbnail(url=f"{ctx.guild.icon_url}")
      embed.add_field(name=f"Dein Ticket wurde von {ctx.author}, geschlossen", value=f"Grund: {grund}")
      embed.set_footer(text="Wann ist das passiert?")
      embed.timestamp = datetime.utcnow()
      await membert.send(embed=embed)
      await membert.send("TRANSKRIPT", file=discord.File(file,filename=filename))    

    os.remove(f"{filename}")
    await ctx.channel.delete()
  




【讨论】:

    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2021-08-12
    • 2021-01-03
    • 1970-01-01
    相关资源
    最近更新 更多