async def greetRemove(self, ctx: Context, name: str): """ Remove a greeting Parameters: ----------- name: name of the greeting to remove """ def check(message: discord.Message): return message.author == ctx.message.author and message.channel == ctx.message.channel greetings = await self.config.guild(ctx.guild).greetings() if name in greetings: await ctx.send( warning("Are you sure you wish to delete this greeting? Respond with 'yes' if yes") ) try: response = await self.bot.wait_for("message", timeout=30.0, check=check) except asyncio.TimeoutError: await ctx.send("You took too long, not deleting") return if response.content.lower() != "yes": await ctx.send("Not deleting") return # delete the greeting del greetings[name] await ctx.send(f"{name} removed from list") await self.config.guild(ctx.guild).greetings.set(greetings) else: ctx.send(f"{name} not in list of greetings") return
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)
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)
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!")