#python #python-3.x #discord #discord.py
#python #python-3.x #Discord #discord.py
Вопрос:
Итак, я тестировал с помощью команды, которая может просматривать бота. Он обнаружит аргумент и обнаружит, находится ли аргумент в thing, если он находится в thing, он напечатает следующую информацию. Но он работает только с последней информацией. Как я могу это исправить?
Код команды:
@client.command(pass_context=True)
async def viewbot(ctx, arg):
for bot in data['bots']:
name = bot["name"]
#createdby = bot["createdby"]
briefdesc = bot["briefdesc"]
desc = bot["description"]
slug = bot["slug"]
if arg == f'{slug}':
embed = discord.Embed(title=name,description=briefdesc,timestamp=ctx.message.created_at,colour=discord.Color.dark_green())
await ctx.send(embed = embed)
else:
print("no")
Код JSON:
{
"bots": [
{
"name": "Bot1",
"createdby": "Bit#0258",
"briefdesc": "Texts.",
"description": "Test",
"library": "discord.py",
"slug": "bot1"
},
{
"name": "Bot2",
"createdby": "BotTest#0001",
"briefdesc": "Text",
"description": "Rext",
"library": "discord.js",
"slug": "bot2"
}
]
}
Если вы знаете, как это исправить, пожалуйста, ответьте на этот вопрос. Спасибо.
Комментарии:
1. Что означает «последняя информация»? Также как вы вызываете свою функцию?
2. Это на самом деле так, как ваш код имеет отступ? Затем тщательно подумайте: сколько раз должна
if arg == f'{slug}':
выполняться проверка? Сколько раз это происходит на самом деле? Какая особенность вашего кода предназначена для того, чтобы это происходило так много раз? Учитывая отступ вашего кода, будет ли он работать так, как вы ожидаете?
Ответ №1:
Посмотрите на свою логику:
for bot in data['bots']:
name = bot["name"]
#createdby = bot["createdby"]
briefdesc = bot["briefdesc"]
desc = bot["description"]
slug = bot["slug"]
if arg == f'{slug}':
...
Вы специально сказали ему просмотреть все доступные боты, извлечь их поля и записать каждое поверх предыдущего набора данных. Когда вы выходите из цикла, в каждой переменной находится только самое последнее значение. Вот как работают переменные.
Чтобы получить все значения, либо переместите свою обработку (the if
) внутри цикла, либо соберите данные в списках вместо скалярных переменных.