예제 #1
0
    async def raAssign(self, ctx: Context, role: discord.Role = None):
        """Randomly assign roles to members of the guild.

        Parameters:
        -----------
        role: discord.Role (optional)
            Apply to a subset of users with a certain role. If this is not specified,
            then it will apply one of the roles to ALL members of the guild.
        """
        async with self.config.guild(ctx.guild).roles() as roleList:
            members = ctx.guild.members
            if role:
                members = [
                    member for member in members if role in member.roles
                ]
            msgObj = await ctx.send(":hourglass: **Role Assigner - Assign:** "
                                    "Assigning roles, please wait...")

            roleObjList = []
            for roleId in roleList:
                roleObject = discord.utils.get(ctx.guild.roles, id=roleId)
                if roleObject:
                    roleObjList.append(roleObject)

            async with ctx.typing():
                random.shuffle(members)
                # Assigning roles takes a while
                for index, member in enumerate(members):
                    anyRoles = [i for i in member.roles if i in roleObjList]
                    if not anyRoles:
                        # Only assign one role per user. If they have one already,
                        # just skip them
                        try:
                            await member.add_roles(
                                roleObjList[index % len(roleObjList)])
                        except discord.NotFound:
                            self.logger.error(
                                "Could not assign role: Member most "
                                "likely just left the server!")

            msg = ":white_check_mark: **Role Assigner - Assign:** Roles assigned"
            if role:
                msg += " to users with the {} role.".format(role.name)
            else:
                msg += "."
            await msgObj.edit(content=msg)
예제 #2
0
    async def raUnassign(self, ctx: Context, role: discord.Role = None):
        """Remove roles on the list from users.

        Parameters:
        -----------
        role: discord.Role (optional)
            Remove roles from members with a certain role. If this is not specified,
            then it will remove all roles on the list from ALL members of the guild.
        """
        async with self.config.guild(ctx.guild).roles() as roleList:
            members = ctx.guild.members
            if role:
                members = [
                    member for member in members if role in member.roles
                ]

            msgObj = await ctx.send(
                ":hourglass: **Role Assigner - Unassign:** "
                "Unassigning roles, please wait...")

            roleObjList = []
            for roleId in roleList:
                roleObject = discord.utils.get(ctx.guild.roles, id=roleId)
                roleObjList.append(roleObject)

            async with ctx.typing():
                for member in members:
                    try:
                        await member.remove_roles(*roleObjList)
                    except discord.NotFound:
                        self.logger.error(
                            "Could not unassign roles: Member most likely "
                            "just left the server!")

            msg = ":white_check_mark: **Role Assigner - Unassign:** Roles removed"
            if role:
                msg += " from users with the {} role.".format(role.name)
            else:
                msg += "."
            await msgObj.edit(content=msg)
예제 #3
0
파일: avatar.py 프로젝트: SFUAnime/Ren
 async def _saveAvatars(self, ctx: Context):
     """Save all avatars in the current guild."""
     async with ctx.typing():
         for member in ctx.guild.members:
             await self.saveAvatar(member)
         await ctx.send("Saved all avatars!")