По какой причине мой код дублирует токены, которые я создаю? Discord.py

#python #discord.py

Вопрос:

Что происходит, когда я создаю токен, он также публикует предыдущий токен

Изображение

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

 tokenOpts = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".lower()

tkn = []

def GenToken():
    t1 = ''.join((choice(tokenOpts)) for x in range(5))
    t2 = ''.join((choice(tokenOpts)) for x in range(3))
    t3 = ''.join((choice(tokenOpts)) for x in range(7))
    t4 = ''.join((choice(tokenOpts)) for x in range(5))
    return f"{t1}-{t2}-{t3}-{t4}"

@bot.command()
async def createtoken(ctx, planDays=0):
    if ctx.message.author.id in config.OWNERS:
        with open(path, "r") as data: tokens = json.load(data)
        with open(path, "w") as output:
            #with open("temp", "w") as tk:
            for i in range(int(1)): 
                tok = GenToken()
                tkn.append(tok)
                tokens[0]['Unused'].append({"Days": planDays, "Level": "None", "Token": str(tok)})
            output.write(json.dumps(tokens, sort_keys=False, indent=4))
            o = 'n'.join(tkn)
            # tk.write(o)
            embed = discord.Embed(
                title="Verification",
                color= discord.Color.dark_theme()
            )
            embed.add_field(name="Token Status: Created <:white_check_mark:886940376127131689>", value=f"Token: `{o}`")
            embed.set_footer(text="YoursTruly.exe")
            await ctx.send(embed=embed)
 

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

1. почему у тебя есть for i in range(int(1)): . цикл for бесполезен, приведение int также бесполезно. если это произойдет только один раз, то удалите цикл for и снимите отступы между строками. и где определяется tkn?

2. @WasiMaster ой, мой плохой, tkn — это стол. Я помещу его в код, спасибо, что заметили. Изменить: Только что отредактировал мой код.

Ответ №1:

tkn определяется глобально, поэтому, если вы добавите другой токен, он будет сохранен даже после завершения метода. Таким образом, каждый раз, когда вызывается метод, tkn становится на одну запись больше.

Просто переместите объявление tkn внутри функции. Или не используйте все это, просто используйте tok вместо o встраивания. Это тоже должно сработать.