Access variables between commands with discord.py

2019-09-20 23:50发布

问题:

I have this (overly simplified) Discord bot

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

The problem

When I call call the vote() command, it always goes through the else part of the code. Even after calling the start() command

What I want to achieve

I want that the vote() command behave differently depending on if the other two commands where called previously

What I tried

I tried using the global keyword like this on the first line

global voting_enabled
voting_enabled = False

But it did nothing

回答1:

The global keyword was not used correctly.

global should be defined within every function.

Example:

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