我有一个命令¬host
,它会启动游戏。角色为Admin
的人可以使用¬cleargames
通过变量Host
停止游戏并删除消息。
但是,如果我先运行¬host
然后运行¬cleargames
,它就可以工作。如果再次执行此操作,则会收到错误消息。
这用于使用discord.py asyncio的不和谐服务器。我不断收到错误消息:
命令cleargames已被注册。
@client.command(pass_context=True)
async def host(ctx):
host = "."
if host == ".":
host = ctx.message.author
message = (f"__**Player List**__ \n \n{host.mention} (Host)")
playerList = await client.say(message)
@client.command(pass_context=True)
@has_role("Admin")
async def cleargames(ctx):
command = ctx.message
await client.delete_message(playerList)
await client.delete_message(command)
notfication = await client.say("Games cleared.")
time.sleep(5)
await client.delete_message(notification)
host = "."
它应该能够多次执行¬host
和¬cleargames
命令,而不会出现错误。
答案 0 :(得分:1)
同一命令不能有多个版本。当您再次尝试运行host
时,它将尝试再次以名称cleargames
注册命令,该命令将失败。
相反,编写两个单独的命令,这些命令通过相互访问的全局变量共享状态。
playerList = None
@client.command(pass_context=True)
async def host(ctx):
global playerList
if playerList:
return
host = ctx.message.author
message = (f"__**Player List**__ \n \n{host.mention} (Host)")
playerList = await client.say(message)
@client.command(pass_context=True)
@has_role("Admin")
async def cleargames(ctx):
global playerList
if playerList:
await client.delete_message(playerList)
playerList = None
await client.delete_message(ctx.message)
notfication = await client.say("Games cleared.")
await asyncio.sleep(5)
await client.delete_message(notification)