示例#1
0
    async def _report_global_member(self, ctx: commands.Context, cog: str):
        """Check global member bot settings for the specified Cog."""
        cog_obj = ctx.bot.get_cog(cog)
        if cog_obj is None and cog != "Red":
            return await ctx.send(
                _("Unable to find a cog called: {cog}").format(cog=cog))
        elif cog == "nonono" "Red":  # TODO wait for core fix
            config = Config.get_core_conf(force_registration=False)
        else:
            config = self.maybe_get_config(cog_obj)
        if config is None:
            return await ctx.send(
                _("Unable to find settings for: {cog}").format(
                    cog=cog_obj.qualified_name if hasattr(
                        cog_obj, "qualified_name") else cog_obj.__class__.
                    __name__ if cog != "Red" else "Red Core"))
        global_config = await config.all_members()
        temp = deepcopy(global_config)
        for gk, gv in temp.items():
            for mk, mv in gv.items():
                for k, v in mv.items():
                    if not isinstance(
                            v, (str, bool, int, type(None))) or "token" in k:
                        del global_config[gk][mk][k]
        new = {}
        for gid, gdata in global_config.items():
            for mk, mv in gdata.items():
                for k, v in mv.items():
                    if k not in new:
                        new[k] = [v]
                    else:
                        new[k].append(v)
        new2 = {}
        for k, v in new.items():
            new2[k] = self.get_usage(v)

        if not new2:
            return await ctx.send(
                _("No member settings for: {cog}").format(
                    cog=cog_obj.qualified_name if hasattr(
                        cog_obj, "qualified_name") else cog_obj.__class__.
                    __name__ if cog != "Red" else "Red Core"))

        max_len = max([len(v) for v in new2.keys()])
        padding = 4
        data = _("< {cog} > Member settings for {bot.name}\n\n").format(
            bot=self.bot.user,
            cog=cog_obj.qualified_name if hasattr(cog_obj, "qualified_name")
            else cog_obj.__class__.__name__ if cog != "Red" else "Red Core",
        )
        for k, v in sorted(new2.items(), key=lambda i: str(i[0])):
            k = str(k).replace("_", " ").title()
            v = v
            data += "{k:{k_len:d}} | {v}\n".format(k_len=max_len + padding,
                                                   v=v,
                                                   k=k)
        for page in pagify(data, shorten_by=10):
            await ctx.send(box(page, lang="md"))
示例#2
0
async def json_to_mongov2(instance):
    instance_vals = instance_data[instance]
    current_data_dir = Path(instance_vals["DATA_PATH"])

    load_basic_configuration(instance)

    from redbot.core.drivers import red_mongo

    storage_details = red_mongo.get_config_details()

    core_conf = Config.get_core_conf()
    new_driver = red_mongo.Mongo(cog_name="Core",
                                 identifier="0",
                                 **storage_details)

    core_conf.init_custom("CUSTOM_GROUPS", 2)
    custom_group_data = await core_conf.custom("CUSTOM_GROUPS").all()

    curr_custom_data = custom_group_data.get("Core", {}).get("0", {})
    exported_data = await core_conf.driver.export_data(curr_custom_data)
    conversion_log.info("Starting Core conversion...")
    await new_driver.import_data(exported_data, curr_custom_data)
    conversion_log.info("Core conversion complete.")

    for p in current_data_dir.glob("cogs/**/settings.json"):
        cog_name = p.parent.stem
        if "." in cog_name:
            # Garbage handler
            continue
        with p.open(mode="r") as f:
            cog_data = json.load(f)
        for identifier, all_data in cog_data.items():
            try:
                conf = Config.get_conf(None,
                                       int(identifier),
                                       cog_name=cog_name)
            except ValueError:
                continue
            new_driver = red_mongo.Mongo(
                cog_name=cog_name,
                identifier=conf.driver.unique_cog_identifier,
                **storage_details)

            curr_custom_data = custom_group_data.get(cog_name,
                                                     {}).get(identifier, {})

            exported_data = await conf.driver.export_data(curr_custom_data)
            conversion_log.info(
                f"Converting {cog_name} with identifier {identifier}...")
            await new_driver.import_data(exported_data, curr_custom_data)

    conversion_log.info("Cog conversion complete.")

    return storage_details
示例#3
0
    async def _report_member(self, ctx: commands.Context, cog: str,
                             member: discord.Member):
        """Check bot settings for the specified Cog in the Member scope."""
        cog_obj = ctx.bot.get_cog(cog)
        if cog_obj is None and cog != "Red":
            return await ctx.send(
                _("Unable to find a cog called: {cog}").format(cog=cog))
        elif cog == "nonono" "Red":  # TODO wait for core fix
            config = Config.get_core_conf(force_registration=False)
        else:
            config = self.maybe_get_config(cog_obj)
        if config is None:
            return await ctx.send(
                _("Unable to find settings for: {cog}").format(
                    cog=cog_obj.qualified_name if hasattr(
                        cog_obj, "qualified_name") else cog_obj.__class__.
                    __name__ if cog != "Red" else "Red Core"))
        member_config = await config.member(member).all()
        temp = member_config.copy()
        for k, v in temp.items():
            if not isinstance(v, (str, bool, int, type(None))) or "token" in k:
                del member_config[k]

        max_len = max([len(v) for v in member_config.keys()])
        padding = 4
        data = _("< {cog} > Settings for {user}\n\n").format(
            user=member,
            cog=cog_obj.qualified_name if hasattr(cog_obj, "qualified_name")
            else cog_obj.__class__.__name__ if cog != "Red" else "Red Core",
        )
        for k, v in sorted(member_config.items(), key=lambda i: str(i[0])):
            k = str(k).replace("_", " ").title()
            v = str(v)
            data += "{k:{k_len:d}} | <{v}>\n".format(k_len=max_len + padding,
                                                     v=v,
                                                     k=k)
        for page in pagify(data, shorten_by=10):
            await ctx.send(box(page, lang="md"))
示例#4
0
async def mongov2_to_json(instance):
    load_basic_configuration(instance)

    core_path = core_data_path()

    from redbot.core.drivers import red_json

    core_conf = Config.get_core_conf()
    new_driver = red_json.JSON(cog_name="Core",
                               identifier="0",
                               data_path_override=core_path)

    core_conf.init_custom("CUSTOM_GROUPS", 2)
    custom_group_data = await core_conf.custom("CUSTOM_GROUPS").all()

    curr_custom_data = custom_group_data.get("Core", {}).get("0", {})
    exported_data = await core_conf.driver.export_data(curr_custom_data)
    conversion_log.info("Starting Core conversion...")
    await new_driver.import_data(exported_data, curr_custom_data)
    conversion_log.info("Core conversion complete.")

    collection_names = await core_conf.driver.db.list_collection_names()
    splitted_names = list(
        filter(
            lambda elem: elem[1] != "" and elem[0] != "Core",
            [n.split(".") for n in collection_names],
        ))

    ident_map = {}  # Cogname: idents list
    for cog_name, category in splitted_names:
        if cog_name not in ident_map:
            ident_map[cog_name] = set()

        idents = await core_conf.driver.db[cog_name][category].distinct(
            "_id.RED_uuid")
        ident_map[cog_name].update(set(idents))

    for cog_name, idents in ident_map.items():
        for identifier in idents:
            curr_custom_data = custom_group_data.get(cog_name,
                                                     {}).get(identifier, {})
            try:
                conf = Config.get_conf(None,
                                       int(identifier),
                                       cog_name=cog_name)
            except ValueError:
                continue
            exported_data = await conf.driver.export_data(curr_custom_data)

            new_path = cog_data_path(raw_name=cog_name)
            new_driver = red_json.JSON(cog_name,
                                       identifier,
                                       data_path_override=new_path)
            conversion_log.info(
                f"Converting {cog_name} with identifier {identifier}...")
            await new_driver.import_data(exported_data, curr_custom_data)

    # cog_data_path(raw_name=cog_name)

    conversion_log.info("Cog conversion complete.")

    return {}