【发布时间】: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