【问题标题】:Advanced ticket system discord.py高级票务系统 discord.py
【发布时间】:2021-04-15 07:34:10
【问题描述】:

我正在为我的机器人创建一个工单系统,以便成员可以将他们的问题告诉模组,我可以通过一次又一次的反应来创建多个工单通道,没有任何限制。但我希望应该有一个限制,这样当有一张正在进行的票时,特定用户就不能再创建一张票,机器人应该对他大喊大叫。

代码:

 @bot.event
 async def on_raw_reaction_add(payload):
    if payload.member.id != bot.user.id and str(payload.emoji)== u"\U0001F3AB":
        msg_id, channel_id, category_id= bot.ticket_configs[payload.guild_id]

        if payload.message_id == msg_id:
            guild= bot.get_guild(payload.guild_id)
  
            for category in guild.categories:
                if category.id == category_id:
                    break
   
            channel = guild.get_channel(channel_id)

            ticket_num= 1 if len(category.channels) == 0 else int(category.channels[-1].name.split("-")[1]) + 1
            ticket_channel= await category.create_text_channel(f"Ticket {ticket_num}", topic= f"Channel for ticket number {ticket_num}.", permission_synced= True)
    
            await ticket_channel.set_permissions(payload.member, read_messages= True, send_messages= True) 
    
            message= await channel.fetch_message(msg_id)
            await message.remove_reaction(payload.emoji, payload.member)
    
            await ticket_channel.send(f"{payload.member.mention} Thank You! for creating this ticket staff will contact you soon. Type **-close** to close the ticket.")
    
            try:
                await bot.wait_for("message", check=lambda m: m.channel== ticket_channel and m.author== payload.member and m.content == "-close", timeout= 3600)
                
            except asyncio.TimeoutError:
                await ticket_channel.delete()
    
            else:
                await ticket_channel.delete()

TL;DR:我的机器人目前可以无限制地创建多个票务渠道。但是,我想强制执行一个限制,如果用户有一个现有的票但开始了一个新频道,机器人会提醒他他已经有一个现有的票。

【问题讨论】:

  • 您必须将数据存储在数据库或文件中。
  • 我可以看看你的字典或json文件吗?

标签: python discord.py ticket-system


【解决方案1】:

试试这个

if discord.utils.get(guild.channels, name=f"Ticket {ticket_num}") != None:
    await payload.member.send(content=f"Ticket {ticket_num} is already an existing channel!")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-20
    • 2020-09-06
    • 2011-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多