diff --git a/core/bot.py b/core/bot.py index b389b587d..ef03ddb0f 100644 --- a/core/bot.py +++ b/core/bot.py @@ -10,13 +10,13 @@ class Red(commands.Bot): def __init__(self, cli_flags, **kwargs): self._shutdown_mode = ExitCodes.CRITICAL self.db = Config.get_core_conf(force_registration=True) + self._co_owners = cli_flags.co_owner self.db.register_global( token=None, prefix=[], packages=[], owner=None, - coowners=[], whitelist=[], blacklist=[], enable_sentry=None @@ -43,6 +43,9 @@ class Red(commands.Bot): if "command_prefix" not in kwargs: kwargs["command_prefix"] = prefix_manager + if cli_flags.owner and "owner_id" not in kwargs: + kwargs["owner_id"] = cli_flags.owner + if "owner_id" not in kwargs: kwargs["owner_id"] = self.db.get("owner") @@ -51,7 +54,7 @@ class Red(commands.Bot): super().__init__(**kwargs) async def is_owner(self, user): - if user.id in self.db.coowners(): + if user.id in self._co_owners: return True return await super().is_owner(user) diff --git a/core/cli.py b/core/cli.py index 3dcbd1bb7..36861e913 100644 --- a/core/cli.py +++ b/core/cli.py @@ -63,9 +63,17 @@ def ask_sentry(red: Red): def parse_cli_flags(): parser = argparse.ArgumentParser(description="Red - Discord Bot") - parser.add_argument("--owner", help="ID of the owner. Only who hosts " - "Red should be owner, this has " - "security implications") + parser.add_argument("--owner", type=int, + help="ID of the owner. Only who hosts " + "Red should be owner, this has " + "serious security implications.") + parser.add_argument("--co-owner", type=int, action="append", default=[], + help="ID of a co-owner. Only people who have access " + "to the system that is hosting Red should be " + "co-owners, as this gives them complete access " + "to the system's data. This has serious " + "security implications if misused. Can be " + "multiple.") parser.add_argument("--prefix", "-p", action="append", help="Global prefix. Can be multiple") parser.add_argument("--no-prompt", diff --git a/core/core_commands.py b/core/core_commands.py index a9e82930f..76c2bfdf8 100644 --- a/core/core_commands.py +++ b/core/core_commands.py @@ -11,10 +11,10 @@ import asyncio log = logging.getLogger("red") -OWNER_DISCLAIMER = ("Setting as owner people who do not have access to " - "the system that is hosting Red is **extremely " - "dangerous**.\n**Owners and co owners are able to access " - "any data that is present on the host system.**") +OWNER_DISCLAIMER = ("⚠ **Only** the person who is hosting Red should be " + "owner. **This has SERIOUS security implications. The " + "owner can access any data that is present on the host " + "system.** ⚠") class Core: @@ -281,38 +281,3 @@ class Core: await ctx.send("You have been set as owner.") else: await ctx.send("Invalid token.") - - @_set.command(aliases=["coowners"]) - @checks.is_owner() - @commands.guild_only() - async def coowner(self, ctx, *coowners: discord.Member): - """Sets Red's coowner(s) - - Leave empty to reset""" - def check(m): - return m.author == ctx.author and m.channel == ctx.channel - - coowners = [m.id for m in coowners] - - if not coowners: - await ctx.bot.db.set("coowners", []) - await ctx.send("Coowners list cleared.") - return - - await ctx.send("Remember:\n" + OWNER_DISCLAIMER) - await asyncio.sleep(5) - - await ctx.send("Type `I understand` if you have read and understand " - "the above message.") - - try: - message = await ctx.bot.wait_for("message", check=check, - timeout=60) - except asyncio.TimeoutError: - await ctx.send("The set owner request has timed out.") - else: - if message.content.lower().strip() == "i understand": - await ctx.bot.db.set("coowners", coowners) - await ctx.send("{} coowner(s) set.".format(len(coowners))) - else: - await ctx.send("Set coowner request aborted.") \ No newline at end of file