Browse Source

New way of storing settings in there. On reflection idk how much this will make things cleaner. But it might. So lets just finish it in settings and bug test it. If it works, then its good.

tags/v1.5.0
Roxie Gibson 6 years ago
parent
commit
cc44df0e9c
2 changed files with 88 additions and 82 deletions
  1. +81
    -70
      Roxbot/settings/guild_settings.py
  2. +7
    -12
      main.py

+ 81
- 70
Roxbot/settings/guild_settings.py View File

@@ -1,26 +1,6 @@
import json


def get(guilds):
guild_list = []
for guild in guilds:
guild = GuildSettings(guild)
guild_list.append(guild)
return guild_list

def get_guild(guilds, wanted_guild):
for guild in guilds:
if guild.id == wanted_guild.id:
return guild
return None

class GuildSettings(object):

__slots__ = ["settings", "id", "nsfw", "self_assign", "greets", "goodbyes", "twitch", "perm_roles", "custom_commands", "warnings", "is_anal", "gss", "guild_template"]

def __init__(self, guild):
self.id = guild.id
self.guild_template = {
guild_template = {
"example": {
"greets": {
"enabled": 0,
@@ -67,65 +47,96 @@ class GuildSettings(object):
"is_anal": {"y/n": 0}
}
}
self.get_settings()

def _write_changes(self, config):
with open('settings/servers.json', 'w') as conf_file:
json.dump(config, conf_file)

def _error_check(self):
for server in self.settings:
print(server)
# Server ID needs to be made a string for this statement because keys have to be strings in JSON. Which is annoying now we use int for ids.
server_id = str(server.id)
if str(server_id) not in self.settings:
self.settings[server_id] = self.guild_template["example"]
self.update_settings(self.settings)
print(
"WARNING: The settings file for {} was not found. A template has been loaded and saved. All cogs are turned off by default.".format(
server.name.upper()))
else:
for cog_setting in self.guild_template["example"]:
if cog_setting not in self.settings[server_id]:
self.settings[server_id][cog_setting] = self.guild_template["example"][
cog_setting]
self.update_settings(self.settings)
def _open_config():
with open('Roxbot/settings/servers.json', 'r') as config_file:
return json.load(config_file)

def _write_changes(config):
with open('Roxbot/settings/servers.json', 'w') as conf_file:
json.dump(config, conf_file)

def remove_guild(guild):
settings = _open_config()
settings.pop(str(guild.id))
_write_changes(settings)

def error_check(servers):
settings = _open_config()
for server in servers:
# Server ID needs to be made a string for this statement because keys have to be strings in JSON. Which is annoying now we use int for ids.
server_id = str(server.id)
if str(server_id) not in settings:
settings[server_id] = guild_template["example"]
_write_changes(settings)
print(
"WARNING: The settings file for {} was not found. A template has been loaded and saved. All cogs are turned off by default.".format(
server.name.upper()))
else:
for cog_setting in guild_template["example"]:
if cog_setting not in settings[server_id]:
settings[server_id][cog_setting] = guild_template["example"][
cog_setting]
_write_changes(settings)
print(
"WARNING: The settings file for {} was missing the {} cog. This has been fixed with the template version. It is disabled by default.".format(
server.name.upper(), cog_setting.upper()))
for setting in guild_template["example"][cog_setting]:
if setting not in settings[server_id][cog_setting]:
settings[server_id][cog_setting][setting] = guild_template["example"][
cog_setting][setting]
_write_changes(settings)
print(
"WARNING: The settings file for {} was missing the {} cog. This has been fixed with the template version. It is disabled by default.".format(
server.name.upper(), cog_setting.upper()))
for setting in self.guild_template["example"][cog_setting]:
if setting not in self.settings[server_id][cog_setting]:
self.settings[server_id][cog_setting][setting] = self.guild_template["example"][
cog_setting][setting]
self.update_settings(self.settings)
print(
"WARNING: The settings file for {} was missing the {} setting in the {} cog. This has been fixed with the template version. It is disabled by default.".format(
server.name.upper(), setting.upper(), cog_setting.upper()))
"WARNING: The settings file for {} was missing the {} setting in the {} cog. This has been fixed with the template version. It is disabled by default.".format(
server.name.upper(), setting.upper(), cog_setting.upper()))

def get(guilds):
error_check(guilds)
guild_list = []
for guild in guilds:
guild = GuildSettings(guild)
guild_list.append(guild)
return guild_list

def get_guild(guilds, wanted_guild):
for guild in guilds:
if guild.id == wanted_guild.id:
return guild
return None

class GuildSettings(object):

__slots__ = ["settings", "id", "name", "nsfw", "self_assign", "greets", "goodbyes", "twitch", "perm_roles", "custom_commands", "warnings", "is_anal", "gss"]

def __init__(self, guild):
self.id = guild.id
self.name = str(guild)
self.settings = _open_config()[str(self.id)]
self.get_settings()

print("")
def __str__(self):
return self.name

def get_settings(self):
with open('Roxbot/settings/servers.json', 'r') as config_file:
self.settings = json.load(config_file)
print(self.settings)
print(type(self.settings))
self._error_check()
self.nsfw = self.settings[str(self.id)]["nsfw"]
self.self_assign = self.settings[str(self.id)]["self_assign"]
self.greets = self.settings[str(self.id)]["greets"]
self.goodbyes = self.settings[str(self.id)]["goodbyes"]
self.twitch = self.settings[str(self.id)]["twitch"]
self.perm_roles = self.settings[str(self.id)]["perm_roles"]
self.custom_commands = self.settings[str(self.id)]["custom_commands"]
self.warnings = self.settings[str(self.id)]["warnings"]
self.is_anal = self.settings[str(self.id)]["is_anal"]
self.nsfw = self.settings["nsfw"]
self.self_assign = self.settings["self_assign"]
self.greets = self.settings["greets"]
self.goodbyes = self.settings["goodbyes"]
self.twitch = self.settings["twitch"]
self.perm_roles = self.settings["perm_roles"]
self.custom_commands = self.settings["custom_commands"]
self.warnings = self.settings["warnings"]
self.is_anal = self.settings["is_anal"]
# Add custom cog settings loading here
self.gss = self.settings[str(self.id)]["gss"]
self.gss = self.settings["gss"]

def update_settings(self, changed_dict, setting = None):
self.get_settings()
if setting:
if setting is not None:
self.settings[str(self.id)][setting] = changed_dict
else:
self.settings[str(self.id)] = changed_dict
self._write_changes(self.settings)
settings = _open_config()
settings[str(self.id)] = self.settings
_write_changes(settings)

+ 7
- 12
main.py View File

@@ -7,7 +7,7 @@ import datetime
import discord
from discord.ext import commands
from Roxbot import load_config
from Roxbot.settings import guild_settings
from Roxbot.settings import guild_settings as gs


# Sets up Logging that discord.py does on its own
@@ -24,8 +24,6 @@ bot = commands.Bot(
activity=discord.Game(name="v{}".format(load_config.__version__), type=0)
)



def blacklisted(user):
with open("Roxbot/blacklist.txt", "r") as fp:
for line in fp.readlines():
@@ -35,10 +33,7 @@ def blacklisted(user):

@bot.event
async def on_ready():
guild_set = guild_settings.get(bot.guilds)
for guild in bot.guilds:
guild.settings = guild_settings.get_guild(guild_set, guild)
print(guild.settings)
bot.settings = gs.get(bot.guilds)

print("Discord.py version: " + discord.__version__)
print("Client logged in\n")
@@ -56,14 +51,14 @@ async def on_ready():


@bot.event
async def on_server_join(server):
pass
async def on_server_join(guild):
bot.settings = gs.get(guild)


@bot.event
async def on_server_remove(server):
pass
async def on_server_remove(guild):
gs.remove_guild(guild)
bot.settings = gs.get(bot.guilds)

@bot.event
async def on_message(message):

Loading…
Cancel
Save