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"))
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
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"))
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 {}