在 discord.py 命令中更改比较语句中的变量

时间:2021-02-11 09:57:23

标签: python discord.py

我需要在 Python 中为 discord bot 创建一个命令,它会按照这个算法工作:当命令被执行时,bot 会从列表中随机显示一条消息,然后这条消息的内容将是以某种方式检查,如果它与条件匹配,则更改将应用​​于变量。我通过为列表中的这个句子检查一个带有随机句子的变量,然后更改机器人稍后将输出的另一个 membercount 变量来做到这一点。但是代码不起作用,出现错误提示您无法从命令中为局部变量 membercount 赋值。我尝试放置 if for 命令,但未找到 konfeticount。仍然需要将它从命令中取出,以便它自动更新,我将它延迟放入 while True 循环中,但没有任何结果。请帮我处理这个问题。提前致谢!代码:

membercount = 0

job = ['Вы проработали в пиццерии и испекли 40 пицц за что получили **220** Монет.', 'Вы проработали мойщиком окон и получили **190** Монет.', 'Вы проработали кассиром в ларьке с мороженным и получили **100** Монет', 'Вы проработали мойщиком посуды в элитном ресторане и получили **280** Монет.', 'Вы проработали на стройке нося кирпичи и получили **230** Монет.', 'Вы проработали установщиком окон и получили **310** Монет.']

@bot.command()
async def j(ctx):
    konfeticount = str(random.choice(job))

    if konfeticount == job[0]:
        membercount += 220

    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} {konfeticount}", title = 'Работа')
    await ctx.send(embed = embed)

# Balance
@bot.command()
async def ballance(ctx):
    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} Ваш баланс - **{membercount}**", title = 'Баланс')
    await ctx.send(embed = embed)

1 个答案:

答案 0 :(得分:1)

您的问题出现是因为 membercount 是一个全局变量,但在 Python 中全局变量被设计为只读。因此,当您尝试分配 membercount += 220 时,Python 所做的是创建一个名为 membercount 的新local 变量。

从函数内部修改全局变量的正确方法是将其声明为global,因此您的代码应该是这样的:

membercount = 0

job = ['Вы проработали в пиццерии и испекли 40 пицц за что получили **220** Монет.', 'Вы проработали мойщиком окон и получили **190** Монет.', 'Вы проработали кассиром в ларьке с мороженным и получили **100** Монет', 'Вы проработали мойщиком посуды в элитном ресторане и получили **280** Монет.', 'Вы проработали на стройке нося кирпичи и получили **230** Монет.', 'Вы проработали установщиком окон и получили **310** Монет.']

@bot.command()
async def j(ctx):
    global membercount   # declare membercount to be a global variable
    konfeticount = str(random.choice(job))

    if konfeticount == job[0]:
        membercount += 220  # here we assign a value to the global variable membercount

    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} {konfeticount}", title = 'Работа')
    await ctx.send(embed = embed)

# Balance
@bot.command()
async def ballance(ctx):
    embed = discord.Embed(color = 0xff0000, description = f"{ctx.message.author.name} Ваш баланс - **{membercount}**", title = 'Баланс')
    await ctx.send(embed = embed)