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.