@Zakkaru

Как можно перенести команду на json?

У меня есть готовая команда, но я без понятие как перенести на json? Ибо я часто перезапускаю бота и чтобы список был постоянно активен
@client.event
async def on_message(message):
    global afk_users
    if message.author.bot:
        return

    # выход пользователя из афк
    if str(message.author.id) in afk_users.keys():
        afk_users.pop(str(message.author.id)) 
        await message.reply("Вы покинули AFK!!!", delete_after=15)

    # проверка, является ли сообщение командой
    await client.process_commands(message)

    # проверка, находится ли пользователь в афк
    for member in message.mentions:
        if str(member.id) in afk_users.keys():
            reason = '*без причины*' if afk_users[str(member.id)] is None else afk_users[str(member.id)]
            await message.delete()
            await message.channel.send(f'Пользователь {member} сейчас в AFK режиме пр причине: __{reason}__', delete_after=15)
            return

@client.command()
async def afk(ctx,*, reason=None):
  with open('afk_users.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(afk_users, indent=4, ensure_ascii=False))
    file.close()
  afk_users[str(ctx.author.id)] = reason
  await ctx.reply(f"Вы ввошли в AFK режим по причине: __{reason}__", delete_after=15)
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Zakkaru, чтобы бот сохранял состояние переменной afk_users в json файл? Ну так бы и сказал.
Ну тогда у тебя много ерунды написано... ну вот хотя бы тут.
with open('afk_users.json', 'w', encoding='utf-8') as file:
    file.write(json.dumps(afk_users, indent=4, ensure_ascii=False))
    file.close()

Во-первых, оператор with сам вызовет file.close() по окончанию.
Во-вторых, можно было сделать проще - json.dump(afk_users, file, indent=4, ensure_ascii=False). Обрати внимание, не dumps(), а dump().
with open('afk_users.json', 'w', encoding='utf-8') as file:
    json.dump(afk_users, file, indent=4, ensure_ascii=False))

В-третьих, почему ты сохраняешь состояние переменной afk_users, а потом тут же её изменяешь? Может, всё-таки в обратном порядке?
В-четвёртых, где у тебя загрузка состояния afk_users из файла? Она должна производиться при запуске бота, например внутри on_ready.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы