async def add(self, ctx, server, role): """Add a role to the list of moderators on a server. If a server or role name has spaces in it, you must enclose *both* of them in quotes, no matter which one is the one with spaces in it. """ mods = load_moderation() valid_server = False valid_role = False for e in self.bot.servers: if e.name == server: valid_server = True for f in e.roles: if f.name == role: valid_role = True if valid_server: if valid_role: try: mods[server] except KeyError: mods[server] = [role] else: mods[server].append(role) with open("settings/moderation.json", "w+") as f: json.dump(mods, f) await self.bot.send_message( ctx.message.channel, self.bot.bot_prefix + "Successfully added {} to the list of mod roles on {}!". format(role, server)) else: await self.bot.send_message( ctx.message.channel, self.bot.bot_prefix + "{} isn't a role on {}!".format(role, server)) else: await self.bot.send_message( ctx.message.channel, self.bot.bot_prefix + "{} isn't a server!".format(server))
async def add(self, ctx, server, role): """Add a role to the list of moderators on a server. If a server or role name has spaces in it, you must enclose *both* of them in quotes, no matter which one is the one with spaces in it. """ mods = load_moderation() valid_server = False valid_role = False for e in self.bot.guilds: if e.name == server: valid_server = True for f in e.roles: if f.name == role: valid_role = True if valid_server: if valid_role: try: mods[server] except KeyError: mods[server] = [role] else: mods[server].append(role) with open("settings/moderation.json", "w+") as f: json.dump(mods, f) await ctx.send( self.bot.bot_prefix + "Successfully added {} to the list of mod roles on {}!".format( role, server)) else: await ctx.send(self.bot.bot_prefix + "{} isn't a role on {}!".format(role, server)) else: await ctx.send(self.bot.bot_prefix + "{} isn't a server!".format(server))
async def lockdown(self, ctx): """Lock message sending in the channel.""" try: try: mod_strings = load_moderation() mod_role_strings = mod_strings[ctx.message.guild.name] mod_roles = [] for m in mod_role_strings: mod_roles.append(discord.utils.get(ctx.message.guild.roles, name=m)) except: mod_roles = [] server = ctx.message.guild overwrites_everyone = ctx.message.channel.overwrites_for(server.default_role) overwrites_owner = ctx.message.channel.overwrites_for(server.role_hierarchy[0]) if ctx.message.channel.id in self.states: await ctx.send("🔒 Channel is already locked down. Use `unlock` to unlock.") return states = [] for a in ctx.message.guild.role_hierarchy: states.append([a, ctx.message.channel.overwrites_for(a).send_messages]) self.states[ctx.message.channel.id] = states overwrites_owner.send_messages = True overwrites_everyone.send_messages = False await ctx.message.channel.set_permissions(server.default_role, overwrite=overwrites_everyone) for modrole in mod_roles: await ctx.message.channel.set_permissions(modrole, overwrite=overwrites_owner) await ctx.send( "🔒 Channel locked down. Only roles with permissions specified in `moderation.json` can speak.") except discord.errors.Forbidden: await ctx.send(self.bot.bot_prefix + "Missing permissions.")
async def lockdown(self, ctx): """Lock message sending in the channel.""" try: try: mod_strings = load_moderation() mod_role_strings = mod_strings[ctx.message.guild.name] mod_roles = [] for m in mod_role_strings: mod_roles.append(discord.utils.get(ctx.message.guild.roles, name=m)) except: mod_roles = [] server = ctx.message.guild overwrites_everyone = ctx.message.channel.overwrites_for(server.default_role) overwrites_owner = ctx.message.channel.overwrites_for(server.role_hierarchy[0]) if ctx.message.channel.id in self.states: await ctx.send("🔒 Channel is already locked down. Use `unlock` to unlock.") return states = [] for a in ctx.message.guild.role_hierarchy: states.append([a, ctx.message.channel.overwrites_for(a).send_messages]) self.states[ctx.message.channel.id] = states overwrites_owner.send_messages = True overwrites_everyone.send_messages = False await ctx.message.channel.set_permissions(server.default_role, overwrite=overwrites_everyone) for modrole in mod_roles: await ctx.message.channel.set_permissions(modrole, overwrite=overwrites_owner) await ctx.send( "🔒 Channel locked down. Only roles with permissions specified in `moderation.json` can speak.") except discord.errors.Forbidden: await ctx.send(self.bot.bot_prefix + "Missing permissions.")
async def remove(self, ctx, server, role): """Remove a role from the list of moderators on a server. If a server or role name has spaces in it, you must enclose *both* of them in quotes, no matter which one is the one with spaces in it. """ mods = load_moderation() try: mods[server].remove(role) with open("settings/moderation.json", "w+") as f: json.dump(mods, f) await ctx.send( self.bot.bot_prefix + "Successfully removed {} from the list of mod roles on {}!".format( role, server)) except (ValueError, KeyError): await ctx.send( self.bot.bot_prefix + "You can't remove something that doesn't exist!")
async def remove(self, ctx, server, role): """Remove a role from the list of moderators on a server. If a server or role name has spaces in it, you must enclose *both* of them in quotes, no matter which one is the one with spaces in it. """ mods = load_moderation() try: mods[server].remove(role) with open("settings/moderation.json", "w+") as f: json.dump(mods, f) await ctx.send( self.bot.bot_prefix + "Successfully removed {} from the list of mod roles on {}!".format( role, server)) except (ValueError, KeyError): await ctx.send( self.bot.bot_prefix + "You can't remove something that doesn't exist!")
async def lockdown(self, ctx): """Lock message sending in the channel.""" try: print(self.states) try: mod_strings = load_moderation() mod_role_strings = mod_strings[ctx.message.server.name] mod_roles = [] for m in mod_role_strings: mod_roles.append( discord.utils.get(ctx.message.server.roles, name=m)) except: mod_roles = [] server = ctx.message.server overwrites_everyone = ctx.message.channel.overwrites_for( server.default_role) overwrites_owner = ctx.message.channel.overwrites_for( server.role_hierarchy[0]) if len(self.states) > 0: await self.bot.say( "🔒 Channel is already locked down. Use `unlock` to unlock." ) return for a in ctx.message.server.role_hierarchy: self.states.append( [a, ctx.message.channel.overwrites_for(a).send_messages]) print(self.states) overwrites_owner.send_messages = True overwrites_everyone.send_messages = False await self.bot.edit_channel_permissions(ctx.message.channel, server.default_role, overwrites_everyone) for modrole in mod_roles: await self.bot.edit_channel_permissions( ctx.message.channel, modrole, overwrites_owner) try: await self.bot.edit_channel_permissions( ctx.message.channel, server.get_member("135204578986557440"), overwrites_owner) except: print( "If you have any issues with this feature, let 'thecommondude' know about it in Appu's Discord Server" ) await self.bot.say( "🔒 Channel locked down. Only roles with permissions specified in `moderation.json` can speak." ) except discord.errors.Forbidden: await self.bot.say("Missing Permissions.")
async def mod(self, ctx): """Manage list of moderator roles for the [p]lockdown command. [p]help mod for more info. [p]mod - List your moderator roles that you have set. [p]mod add <server> <role> - Add a role to the list of moderators on a server. [p]mod remove <server> <role> - Remove a role from the list of moderators on a server. If a server or role name has spaces in it, you must enclose *both* of them in quotes, no matter which one is the one with spaces in it. """ if ctx.invoked_subcommand is None: await ctx.message.delete() mods = load_moderation() embed = discord.Embed(title="Moderator Roles", description="") for server in mods: embed.description += server + ":\n" for mod in mods[server]: embed.description += " {}\n".format(mod) await ctx.send("", embed=embed)
async def mod(self, ctx): """Manage list of moderator roles for the >lockdown command. >help mod for more info. >mod - List your moderator roles that you have set. >mod add <server> <role> - Add a role to the list of moderators on a server. >mod remove <server> <role> - Remove a role from the list of moderators on a server. If a server or role name has spaces in it, you must enclose *both* of them in quotes, no matter which one is the one with spaces in it. """ if ctx.invoked_subcommand is None: await self.bot.delete_message(ctx.message) mods = load_moderation() embed = discord.Embed(title="Moderator Roles", description="") for server in mods: embed.description += server + ":\n" for mod in mods[server]: embed.description += " {}\n".format(mod) await self.bot.send_message(ctx.message.channel, "", embed=embed)