如何修复无法多次使用的命令

时间:2019-05-07 16:40:23

标签: python discord.py

我有一个命令¬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命令,而不会出现错误。

1 个答案:

答案 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)