async def faction_desc_set(self, ctx, *, description): description = re.sub("[^\S ]+", "", description) if not (len(description) <= 240): raise BadArgumentErrorWithMessage( ctx.s("faction.err.description_length")) sql.guild_faction_set(ctx.guild.id, desc=description) await ctx.send(ctx.s("faction.set_description"))
async def faction_color_set(self, ctx, color: str): try: color = abs(int(color, 16) % 0xFFFFFF) except ValueError: await ctx.send(ctx.s("error.invalid_color")) return sql.guild_faction_set(ctx.guild.id, color=color) await ctx.send(ctx.s("faction.set_color"))
async def faction_alias_set(self, ctx, new_alias): new_alias = re.sub("[^A-Za-z]+", "", new_alias).lower() if not (1 <= len(new_alias) <= 5): raise BadArgumentErrorWithMessage(ctx.s("faction.err.alias_length")) if sql.guild_get_by_faction_alias(new_alias): await ctx.send(ctx.s("faction.alias_already_exists")) return sql.guild_faction_set(ctx.guild.id, alias=new_alias) await ctx.send(ctx.s("faction.set_alias").format(new_alias))
async def faction_name_set(self, ctx, new_name): new_name = re.sub("[^\S ]+", "", new_name) if not (6 <= len(new_name) <= 32): raise BadArgumentErrorWithMessage(ctx.s("faction.err.name_length")) if sql.guild_get_by_faction_name(new_name): await ctx.send(ctx.s("faction.name_already_exists")) return sql.guild_faction_set(ctx.guild.id, name=new_name) await ctx.send(ctx.s("faction.set_name").format(new_name))
async def faction_emblem_set(self, ctx, emblem_url=None): if emblem_url: if not re.search('^(?:https?://)cdn\.discordapp\.com/', emblem_url): raise UrlError elif len(ctx.message.attachments) > 0: emblem_url = ctx.message.attachments[0].url if not emblem_url: return sql.guild_faction_set(ctx.guild.id, emblem=emblem_url) await ctx.send(ctx.s("faction.set_emblem"))
async def assemble(self, ctx, name, alias=""): if sql.guild_is_faction(ctx.guild.id): await ctx.send(ctx.s("faction.already_faction")) return name = re.sub("[^\S ]+", "", name) if not (6 <= len(name) <= 32): raise BadArgumentErrorWithMessage(ctx.s("faction.err.name_length")) if sql.guild_get_by_faction_name(name): await ctx.send(ctx.s("faction.name_already_exists")) return alias = re.sub("[^A-Za-z]+", "", alias).lower() if alias and not (1 <= len(alias) <= 5): raise BadArgumentErrorWithMessage(ctx.s("faction.err.alias_length")) if sql.guild_get_by_faction_alias(alias): await ctx.send(ctx.s("faction.alias_already_exists")) return sql.guild_faction_set(ctx.guild.id, name=name, alias=alias) await ctx.send(ctx.s("faction.assembled").format(name))
async def faction_invite_set(self, ctx, url=None): if url: try: invite = await self.bot.get_invite(url) except discord.NotFound: await ctx.send(ctx.s("faction.err.invalid_invite")) return if invite.guild.id != ctx.guild.id: await ctx.send(ctx.s("faction.err.invite_not_this_guild")) return if not re.match(r'(?:https?://)discord\.gg/\w+', url): url = "https://discord.gg/" + url else: if not ctx.channel.permissions_for(ctx.guild.me).create_instant_invite: raise NoSelfPermissionError invite = await ctx.channel.create_invite(reason="Invite for faction info page") url = invite.url sql.guild_faction_set(ctx.guild.id, invite=url) await ctx.send(ctx.s("faction.set_invite"))