Почему две команды if сравнения совмещаются?
@bot.command()
async def M1(message):
with open('coins.json', 'r') as f:
users = json.load(f)
await update_data(users, message.author)
await start(users, message.author, message)
async def start(users, user, message):
if users[str(user.id)]['coins'] > 3065000:
await update_data(users, message.author)
await delete_coins(users, message.author, 3065000)
await send(message)
else:
await message.channel.send('Недостаточно средств для покупки.')
with open('coins.json','w') as f:
json.dump(users, f)
async def update_data(users, user):
if not str(user.id) in users:
users[str(user.id)] = {}
users[str(user.id)]['coins'] = 0
async def delete_coins(users, user, coin):
users[str(user.id)]['coins'] -= coin
async def send(message):
await message.channel.send(f'Да')
@bot.command()
async def M2(message):
with open('coins.json', 'r') as f:
users = json.load(f)
await update_data(users, message.author)
await start(users, message.author, message)
async def start(users, user, message):
if users[str(user.id)]['coins'] > 2065000:
await update_data(users, message.author)
await delete_coins(users, message.author, 2065000)
await send(message)
else:
await message.channel.send('Недостаточно средств для покупки')
with open('coins.json','w') as f:
json.dump(users, f)
async def update_data(users, user):
if not str(user.id) in users:
users[str(user.id)] = {}
users[str(user.id)]['coins'] = 0
async def delete_coins(users, user, coin):
users[str(user.id)]['coins'] -= coin
async def send(message):
await message.channel.send(f'Да2')
Отдельно команды работают правильно, но если их поместить в один код - то команда M1 будет выдавать значения команды M2, а именно вычитать число 2065000 и Да2, при команде M2 выдаёт всё из команды M2. Почему так?
Ответы (1 шт):
В общем, если ты не ошибся с отступами в вопросе, то у тебя просто переопределяется функции, на те, что находятся ниже. Python будет использовать то определение, которое будет находится ниже. Измени названия дублированных функций.
У тебя функции:
async def start(users, user, message):
async def update_data(users, user):
async def delete_coins(users, user, coin):
async def send(message):
переопределяются после async def M2(message): и соответственно при вызове M1 используются они. Измени названия, например на start2, update_data2 и т.д. и не забудь заменить из в тех местах, где их вызываешь.
Или как вариант, определяй функции локально внутри M1 и M2:
@bot.command()
async def M1(message):
with open('coins.json', 'r') as f:
users = json.load(f)
async def start(users, user, message):
if users[str(user.id)]['coins'] > 3065000:
await update_data(users, message.author)
await delete_coins(users, message.author, 3065000)
await send(message)
else:
await message.channel.send('Недостаточно средств для покупки.')
with open('coins.json','w') as f:
json.dump(users, f)
async def update_data(users, user):
if not str(user.id) in users:
users[str(user.id)] = {}
users[str(user.id)]['coins'] = 0
async def delete_coins(users, user, coin):
users[str(user.id)]['coins'] -= coin
async def send(message):
await message.channel.send(f'Да')
await update_data(users, message.author)
await start(users, message.author, message)
@bot.command()
async def M2(message):
with open('coins.json', 'r') as f:
users = json.load(f)
async def start(users, user, message):
if users[str(user.id)]['coins'] > 2065000:
await update_data(users, message.author)
await delete_coins(users, message.author, 2065000)
await send(message)
else:
await message.channel.send('Недостаточно средств для покупки')
with open('coins.json','w') as f:
json.dump(users, f)
async def update_data(users, user):
if not str(user.id) in users:
users[str(user.id)] = {}
users[str(user.id)]['coins'] = 0
async def delete_coins(users, user, coin):
users[str(user.id)]['coins'] -= coin
async def send(message):
await message.channel.send(f'Да2')
await update_data(users, message.author)
await start(users, message.author, message)