Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Python конфиг с discord.py

Дед Ученик (194), на голосовании 2 месяца назад
Помогите сделать конфиг. Суть в том что я сделал бота, мне нужно при вводе команды сохранять значение в файл, чтобы при перезапуске не нужно было снова вводить эти данные, к примеру приведу одну из команд
 @bot.command(name="set_report_role") 
@commands.has_permissions(administrator=True)
async def set_report_channel(ctx, channel_id: int = None):
global roleforreports
if channel_id is not None:
roleforreports = channel_id
await ctx.send(f"Роль для рассмотрения жалоб установлен на <@&{channel_id}>")
else:
await ctx.send("Вы не указали ID роли. Используйте команду так: `.set_report_role 123456789012345678`")
У меня таких команд достаточно много чтобы вводить их при каждом перезапуске. Я пытался сделать вот так, но у меня не получилось:
 import json

settings = {}
SETTINGS_FILE = "settings.json"


idearole = settings.get("idearole")



try:
with open(SETTINGS_FILE, "r") as f:
settings = json.load(f)
except FileNotFoundError:
settings = {}

@bot.command(name="set_idea_role")
@commands.has_permissions(administrator=True)
async def set_report_channel(ctx, channel_id: int = None):
global idearole
if channel_id is not None:
idearole = channel_id
settings["idearole"] = channel_id
with open(SETTINGS_FILE, "w") as f:
json.dump(settings, f)

await ctx.send(f"Роль для рассмотрения идей установлен на <@&{channel_id}>")
else:
await ctx.send("Вы не указали ID роли. Используйте команду так: `.set_idea_role 123456789012345678`")
Буду очень благодарен если поможете
Голосование за лучший ответ
Haredim Мастер (1991) 3 месяца назад
  1. Не используй глобальную переменную в асинхронных функциях - это рак.
  2. У тебя есть пара косяков, вот фикс:
 import json 
import discord

SETTINGS_FILE = "settings.json"

def get_settings():
try:
with open(SETTINGS_FILE, "r") as f:
return json.load(f)
except FileNotFoundError:
return {}

def save_settings(settings):
with open(SETTINGS_FILE, "w") as f:
json.dump(settings, f)

@bot.command(name="set_role")
@commands.has_permissions(administrator=True)
async def set_role(ctx, role_name: str, channel_id: int):
settings = get_settings()
settings[role_name] = channel_id
save_settings(settings)

await ctx.send(f"Роль для {role_name} установлена на <@&{channel_id}>")

await set_role(ctx, "report_role", 123456789012345678)
await set_role(ctx, "idea_role", 987654321098765432)
ДедУченик (194) 2 месяца назад
Спасибо, но я уже сделал сам фикс и проект уже готов
Похожие вопросы