mirror of
https://github.com/Cog-Creators/Red-DiscordBot.git
synced 2025-11-06 11:18:54 -05:00
Added `[p]set serverprefix` `Bot.command_prefix` is now a callable that returns the prefixes set for the server. If none are set, it returns the global ones.
200 lines
6.5 KiB
Python
200 lines
6.5 KiB
Python
from .dataIO import dataIO
|
|
import discord
|
|
import os
|
|
|
|
default_path = "data/red/settings.json"
|
|
|
|
|
|
class Settings:
|
|
|
|
def __init__(self, path=default_path):
|
|
self.path = path
|
|
self.check_folders()
|
|
self.default_settings = {
|
|
"EMAIL": "EmailHere", "PASSWORD": "", "OWNER": "id_here",
|
|
"PREFIXES": [],
|
|
"default": {"ADMIN_ROLE": "Transistor",
|
|
"MOD_ROLE": "Process",
|
|
"PREFIXES": []},
|
|
"LOGIN_TYPE": "email"}
|
|
if not dataIO.is_valid_json(self.path):
|
|
self.bot_settings = self.default_settings
|
|
self.save_settings()
|
|
else:
|
|
current = dataIO.load_json(self.path)
|
|
if current.keys() != self.default_settings.keys():
|
|
for key in self.default_settings.keys():
|
|
if key not in current.keys():
|
|
current[key] = self.default_settings[key]
|
|
print("Adding " + str(key) +
|
|
" field to red settings.json")
|
|
dataIO.save_json(self.path, current)
|
|
self.bot_settings = dataIO.load_json(self.path)
|
|
if "default" not in self.bot_settings:
|
|
self.update_old_settings()
|
|
|
|
def check_folders(self):
|
|
folders = ("data", os.path.dirname(self.path), "cogs", "cogs/utils")
|
|
for folder in folders:
|
|
if not os.path.exists(folder):
|
|
print("Creating " + folder + " folder...")
|
|
os.makedirs(folder)
|
|
|
|
def save_settings(self):
|
|
dataIO.save_json(self.path, self.bot_settings)
|
|
|
|
def update_old_settings(self):
|
|
mod = self.bot_settings["MOD_ROLE"]
|
|
admin = self.bot_settings["ADMIN_ROLE"]
|
|
del self.bot_settings["MOD_ROLE"]
|
|
del self.bot_settings["ADMIN_ROLE"]
|
|
self.bot_settings["default"] = {"MOD_ROLE": mod,
|
|
"ADMIN_ROLE": admin,
|
|
"PREFIXES" : []}
|
|
self.save_settings()
|
|
|
|
@property
|
|
def owner(self):
|
|
return self.bot_settings["OWNER"]
|
|
|
|
@owner.setter
|
|
def owner(self, value):
|
|
self.bot_settings["OWNER"] = value
|
|
self.save_settings()
|
|
|
|
@property
|
|
def email(self):
|
|
return self.bot_settings["EMAIL"]
|
|
|
|
@email.setter
|
|
def email(self, value):
|
|
self.bot_settings["EMAIL"] = value
|
|
self.save_settings()
|
|
|
|
@property
|
|
def password(self):
|
|
return self.bot_settings["PASSWORD"]
|
|
|
|
@password.setter
|
|
def password(self, value):
|
|
self.bot_settings["PASSWORD"] = value
|
|
self.save_settings()
|
|
|
|
@property
|
|
def prefixes(self):
|
|
return self.bot_settings["PREFIXES"]
|
|
|
|
@prefixes.setter
|
|
def prefixes(self, value):
|
|
assert isinstance(value, list)
|
|
self.bot_settings["PREFIXES"] = value
|
|
self.save_settings()
|
|
|
|
@property
|
|
def default_admin(self):
|
|
if "default" not in self.bot_settings:
|
|
self.update_old_settings()
|
|
return self.bot_settings["default"].get("ADMIN_ROLE", "")
|
|
|
|
@default_admin.setter
|
|
def default_admin(self, value):
|
|
if "default" not in self.bot_settings:
|
|
self.update_old_settings()
|
|
self.bot_settings["default"]["ADMIN_ROLE"] = value
|
|
self.save_settings()
|
|
|
|
@property
|
|
def default_mod(self):
|
|
if "default" not in self.bot_settings:
|
|
self.update_old_settings()
|
|
return self.bot_settings["default"].get("MOD_ROLE", "")
|
|
|
|
@default_mod.setter
|
|
def default_mod(self, value):
|
|
if "default" not in self.bot_settings:
|
|
self.update_old_settings()
|
|
self.bot_settings["default"]["MOD_ROLE"] = value
|
|
self.save_settings()
|
|
|
|
@property
|
|
def servers(self):
|
|
ret = {}
|
|
server_ids = list(
|
|
filter(lambda x: str(x).isdigit(), self.bot_settings))
|
|
for server in server_ids:
|
|
ret.update({server: self.bot_settings[server]})
|
|
return ret
|
|
|
|
@property
|
|
def login_type(self):
|
|
return self.bot_settings["LOGIN_TYPE"]
|
|
|
|
@login_type.setter
|
|
def login_type(self, value):
|
|
self.bot_settings["LOGIN_TYPE"] = value
|
|
self.save_settings()
|
|
|
|
def get_server(self, server):
|
|
if server is None:
|
|
return self.bot_settings["default"].copy()
|
|
assert isinstance(server, discord.Server)
|
|
return self.bot_settings.get(server.id,
|
|
self.bot_settings["default"]).copy()
|
|
|
|
def get_server_admin(self, server):
|
|
if server is None:
|
|
return self.default_admin
|
|
assert isinstance(server, discord.Server)
|
|
if server.id not in self.bot_settings:
|
|
return self.default_admin
|
|
return self.bot_settings[server.id].get("ADMIN_ROLE", "")
|
|
|
|
def set_server_admin(self, server, value):
|
|
if server is None:
|
|
return
|
|
assert isinstance(server, discord.Server)
|
|
if server.id not in self.bot_settings:
|
|
self.add_server(server.id)
|
|
self.bot_settings[server.id]["ADMIN_ROLE"] = value
|
|
self.save_settings()
|
|
|
|
def get_server_mod(self, server):
|
|
if server is None:
|
|
return self.default_mod
|
|
assert isinstance(server, discord.Server)
|
|
if server.id not in self.bot_settings:
|
|
return self.default_mod
|
|
return self.bot_settings[server.id].get("MOD_ROLE", "")
|
|
|
|
def set_server_mod(self, server, value):
|
|
if server is None:
|
|
return
|
|
assert isinstance(server, discord.Server)
|
|
if server.id not in self.bot_settings:
|
|
self.add_server(server.id)
|
|
self.bot_settings[server.id]["MOD_ROLE"] = value
|
|
self.save_settings()
|
|
|
|
def get_server_prefixes(self, server):
|
|
if server is None or server.id not in self.bot_settings:
|
|
return self.prefixes
|
|
return self.bot_settings[server.id].get("PREFIXES", [])
|
|
|
|
def set_server_prefixes(self, server, prefixes):
|
|
if server is None:
|
|
return
|
|
assert isinstance(server, discord.Server)
|
|
if server.id not in self.bot_settings:
|
|
self.add_server(server.id)
|
|
self.bot_settings[server.id]["PREFIXES"] = prefixes
|
|
self.save_settings()
|
|
|
|
def get_prefixes(self, server):
|
|
"""Returns server's prefixes if set, otherwise global ones"""
|
|
p = self.get_server_prefixes(server)
|
|
return p if p else self.prefixes
|
|
|
|
def add_server(self, sid):
|
|
self.bot_settings[sid] = self.bot_settings["default"].copy()
|
|
self.save_settings()
|