예제 #1
0
파일: jail.py 프로젝트: 3than0ls/Imperical
 async def delete_jail(self, ctx):
     self.update_response()
     responses = self.responses['jail']['delete_jail']
     guild_id = str(ctx.guild.id)
     data = get_servers_data()
     jail_role = discord.utils.get(ctx.guild.roles,
                                   id=data[guild_id]["jail_role"])
     await ctx.send(responses["starting"].format(jail_role=jail_role.name))
     channels = ctx.guild.channels
     for channel in channels:
         await channel.set_permissions(jail_role, overwrite=None)
     data[guild_id]["jail_role"] = None
     data[guild_id]["jail_channel"] = None
     set_servers_data(data)
     await ctx.send(responses["success"].format(jail_role=jail_role.mention)
                    )
예제 #2
0
    async def delete_profile(self, ctx, profile: str):
        # self.update_responses()
        responses = self.responses['profile']['delete_profile']

        guild_id = str(ctx.guild.id)
        if guild_exists(guild_id):
            data = get_servers_data()
            if profile in data[guild_id]['profiles']:
                del data[guild_id]['profiles'][profile]
                set_servers_data(data)
                await ctx.send(responses["success"].format(
                    name=format(profile, "single_code")))
            else:
                raise commands.BadArgument(profile, "invalid_profile")
        else:
            raise commands.BadArgument(profile, "invalid_profile")
예제 #3
0
    async def create_profile(
        self, ctx, name: str,
        *role_sources: commands.Greedy[typing.Union[discord.Member,
                                                    discord.Role]]):
        # self.update_responses()
        responses = self.responses['profile']['create_profile']

        # get a list of the roles the user wants to add to this newly created profile
        add_roles = []
        for source in role_sources:
            if hasattr(source, 'roles'):  # if it is a member
                for role in source.roles:
                    add_roles.append(role)
            else:
                add_roles.append(source)
        # filter out any duplicates
        add_roles = set(add_roles)
        # filter out the '@everyone' role you may get from members
        add_roles = self.filter_everyone_role(add_roles)
        role_names = [role.name for role in add_roles]
        role_ids = [role.id for role in add_roles]
        guild_id = str(ctx.guild.id)

        message = ""

        if role_names and role_ids:
            guild_exists(guild_id)
            # read server configs
            data = get_servers_data()
            if name in data[guild_id]['profiles']:
                message += f"{responses['replace'].format(name=format(name, 'single_code'))}\n"
            data[guild_id]['profiles'][name] = role_ids
            set_servers_data(data)

            message += responses['success'].format(roles=', '.join([
                format(role_name, "single_code") for role_name in role_names
            ]),
                                                   name=format(
                                                       name, "single_code"))
            await ctx.send(message)
        else:
            raise commands.BadArgument("invalid_role_sources")
예제 #4
0
 async def allow_permission(self, ctx, *users: discord.Member):
     self.update_response()
     responses = self.responses['permissions']['allow_permission']
     if not users:
         return await ctx.send(responses['no_users'])
     data = get_servers_data()
     guild_id = str(ctx.guild.id)
     message = ""
     user_names = []
     for user in users:
         user_id = int(user.id)
         if user_id not in data[guild_id]['custom_has_permission']:
             data[guild_id]['custom_has_permission'].append(user_id)
             user_names.append(user.name)
         else:
             message += f"{responses['fail'].format(user=user.name)}\n"
     set_servers_data(data)
     if user_names:
         user_names = ', '.join(user_names)
         message += responses['success'].format(users=user_names)
     await ctx.send(message)
예제 #5
0
파일: jail.py 프로젝트: 3than0ls/Imperical
    async def create_jail(self, ctx, jail_role: discord.Role,
                          jail_channel: discord.TextChannel):
        self.update_response()
        responses = self.responses['jail']['create_jail']
        await ctx.send(responses['starting'])
        guild_id = str(ctx.guild.id)
        data = get_servers_data()
        # FIXME: if new channels are created after a jail role has been created, the role will have permissions to access it (assuming channel @everyone is open to everyone)
        channels = ctx.guild.channels
        for channel in channels:
            if channel.id == jail_channel.id:
                await channel.set_permissions(jail_role,
                                              read_messages=True,
                                              send_messages=True)
            else:
                await channel.set_permissions(jail_role, read_messages=False)
        guild_id = str(ctx.guild.id)
        data = get_servers_data()
        data[guild_id]['jail_role'] = jail_role.id
        data[guild_id]['jail_channel'] = jail_channel.id
        set_servers_data(data)

        await ctx.send(responses['success'].format(
            jail_role=jail_role.mention, jail_channel=jail_channel.mention))
예제 #6
0
 def remove_profile_role(self, guild_id: str, role_id: int, profile: str):
     data = get_servers_data()
     data[guild_id]['profiles'][profile].remove(role_id)
     set_servers_data(data)