【问题标题】:Access variables between commands with discord.py使用 discord.py 访问命令之间的变量
【发布时间】:2018-06-05 21:52:25
【问题描述】:

我有这个(过于简化的)Discord 机器人

voting_enabled = False

@bot.command()
async def start():
    voting_enabled = True

@bot.command()
async def finish():
    voting_enabled = False

@bot.command()
async def vote():
    if voting_enabled:
        # Do something
    else:
        # Do something else

问题

当我调用vote() 命令时,它总是通过代码的else 部分。即使在调用了start() 命令之后

我想要达到的目标

我希望 vote() 命令的行为有所不同,具体取决于之前是否调用了其他两个命令

我尝试了什么

我尝试在第一行使用像这样的global 关键字

global voting_enabled
voting_enabled = False

但它什么也没做

【问题讨论】:

  • 对不起,你怎么知道“start()finish() commands 都没有改变voting_enabled 的值”?您的任务是异步的,那么您怎么知道 voting_enabled 没有打开然后又关闭?
  • @ubadub 当我调用vote() 命令时,它总是通过else 部分。即使在致电start()
  • 何时/何地调用finish()?我假设你已经遗漏了代码,因为你说它过于简化了。
  • finish() 在投票结束时被用户调用。我认为这与问题无关。调用顺序为start() > vote() > finish(),其中vote()可以调用多次。
  • 你是如何使用global关键字的?

标签: python discord discord.py


【解决方案1】:

除非不要使用全局变量,因为它们很臭。 Discord.py 有另一种方式来做到这一点。

bot.voting_enabled = False

@bot.command()
async def start():
    bot.voting_enabled = True

@bot.command()
async def finish():
    bot.voting_enabled = False

@bot.command()
async def vote():
    if bot.voting_enabled:
        # Do something
    else:
        # Do something else

【讨论】:

    【解决方案2】:

    global 关键字使用不正确。

    global 应该在每个函数中定义。

    例子:

    voting_enabled = False
    
    @bot.command()
    async def start():
        global voting_enabled
    
        voting_enabled = True
    
    @bot.command()
    async def finish():
        global voting_enabled
    
        voting_enabled = False
    
    @bot.command()
    async def vote():
        global voting_enabled
    
        if voting_enabled:
            # Do something
        else:
            # Do something else
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-03
      • 2018-11-22
      • 2014-08-08
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多