Команда DIscord считает, что значение bool равно True

#python #discord

#python #Discord

Вопрос:

У меня есть 3 команды. !отключаемые плагины, !enablepugs и !join. !disablepugs присваивает переменной значение False, а !enablepugs присваивает переменной значение true. Однако переменная изменяется просто отлично. Но, когда я проверяю, равна ли переменная True в !команда join по-прежнему не обнаруживает изменения. Код:

 #Set default to True, shouldn't matter too much
pugs_enabled = True
  
 @client.command()
async def disablepugs(ctx):
    user = ctx.message.author.name

    if user == "*My Name Here*":
        pugs_enabled = False
        await ctx.send("``Pugs are temporarily disabled.``")
        print(f"Set to {pugs_enabled}")
  
 @client.command()
async def enablepugs(ctx):
    user = ctx.message.author.name

    if user == "*My Name Here*":
        pugs_enabled = True
        await ctx.send("``Pugs are now enabled.``")
        print(f"Set to {pugs_enabled}")
  
 @client.command()
async def join(ctx):
    if helper.is_setup(ctx):
        print(f"The pug variable is set to {pugs_enabled}")
        if pugs_enabled is True:
            #Not detecting bool change. Still thinks it's false
  

Есть идеи относительно того, почему? Я в тупике…

Комментарии:

1. Может быть, заменить if pugs_enabled is True: на if pugs_enabled: ?

2. Попробовал это, все тот же результат. Я понятия не имею, почему…

3. Поскольку вы не показали, как pugs_enabled передается из одной функции в другую, трудно сказать.

4. Оппс, я только что обновил вопрос. Я не уверен, нужно ли его передавать, оно находится в верхней части файла

Ответ №1:

pugs_enabled является глобальной переменной. Вы можете получить доступ к глобальным переменным из любой области, но всякий раз, когда вы пытаетесь изменить их значение, вы вместо этого создаете локальную переменную с тем же именем и изменяете только эту локальную переменную. Вы должны явно «подключить» глобальную переменную к вашей области видимости, чтобы изменить глобальное значение.

 pugs_enabled = True

@client.command()
async def disablepugs(ctx):
    user = ctx.message.author.name

    if user == "*My Name Here*":
        global pugs_enabled
        pugs_enabled = False
        await ctx.send("``Pugs are temporarily disabled.``")
        print(f"Set to {pugs_enabled}")

@client.command()
async def enablepugs(ctx):
    user = ctx.message.author.name

    if user == "*My Name Here*":
        global pugs_enabled
        pugs_enabled = True
        await ctx.send("``Pugs are now enabled.``")
        print(f"Set to {pugs_enabled}")

@client.command()
async def join(ctx):
    if helper.is_setup(ctx):
        print(f"The pug variable is set to {pugs_enabled}")
        if pugs_enabled is True:
            #Not detecting bool change. Still thinks it's false