async def roles(self, ctx: Context, role_name: str = None): server = ctx.guild if not server: raise OutOfServer() roles = filter_public_roles(server.roles) if role_name: role = find_role(role_name, roles, raise_exception=True) if role in ctx.author.roles: await ctx.author.remove_roles(role) await ctx.author.send( embed=alert( f"Removed the role {role.name} at {ctx.guild}" ).get_embed() ) else: await ctx.author.add_roles(role) await ctx.author.send( embed=alert( f"Added the role {role.name} at {ctx.guild}" ).get_embed() ) else: await ctx.send(embed=list_roles(roles))
async def create_role(self, ctx: Context, role: str = None): if not ctx.guild: raise OutOfServer() if not ctx.author.guild_permissions.manage_roles: raise PermissionDenied() if not role: raise InvalidArgs("I need a role name!") await ctx.guild.create_role(name=role) await ctx.send(f"Created role {role}")
async def stop(self, ctx: Context): if not ctx.guild: raise OutOfServer() guild: Guild = ctx.guild clients = self.clients if guild.id in clients: client: VoiceClient = clients[guild.id] if client.is_paused() or client.is_playing(): client.stop() await ctx.send(embed=alert("⏹ Stoped").get_embed())
async def disconnect(self, ctx: Context): if not ctx.guild: raise OutOfServer() guild: Guild = ctx.guild clients = self.clients if guild.id in clients: client: VoiceClient = guild.voice_client del clients[guild.id] await client.disconnect() await ctx.send(embed=alert("❌ Disconnected").get_embed())
async def ban(self, ctx: Context, member_name: str = None): if not ctx.guild: raise OutOfServer() if not ctx.author.guild_permissions.ban_members: raise PermissionDenied() if not member_name: raise InvalidArgs("I need a name!") member = find_member(member_name, ctx.guild.members, raise_exception=True) await member.ban() await ctx.send(f"{member.mention} has been banned.")
async def play(self, ctx: Context, *, query: str = None): if not ctx.guild: raise OutOfServer() if not ctx.author.voice: raise OutOfVoiceChannel() guild: Guild = ctx.guild clients = self.clients if guild.id not in clients: client: VoiceClient = await ctx.author.voice.channel.connect() clients[guild.id] = client else: client = clients[guild.id] if not query: if client.is_paused(): client.resume() await ctx.send(embed=alert("▶️ Resumed").get_embed()) return raise InvalidArgs("Tell me what to play!") await ctx.send(embed=alert(f"🔎 Searching for '{query}'").get_embed()) results = YoutubeSearch(query).to_dict() url = f"https://youtube.com{results[0]['url_suffix']}" title = results[0]["title"] player = await YTDLSource.from_url(url, loop=self.bot.loop) if results[0]["thumbnails"]: image = results[0]["thumbnails"][0] else: image = None await ctx.send(embed=Embed( f"Now playing {title}", description=url, colour=Colour.red(), image=image, ).get_embed()) if client.is_playing(): client.stop() client.play(player, after=lambda e: print("Player error: %s" % e) if e else None)
async def invite(self, ctx: Context): if not ctx.guild: raise OutOfServer() guild: Guild = ctx.guild author: Member = ctx.author if not author.guild_permissions.create_instant_invite: raise PermissionDenied() server_invites: List[Invite] = await guild.invites() for invite in server_invites: if invite.inviter == self.bot.user and invite.max_age == 0: await ctx.send(invite.url) return channel: TextChannel = ctx.channel invite: Invite = await channel.create_invite() await ctx.send(invite.url)
async def all(self, ctx: Context): if not ctx.guild: raise OutOfServer() if not ctx.author.guild_permissions.mention_everyone: raise PermissionDenied() await ctx.send(ctx.guild.default_role)
async def random_member(self, ctx: Context): if not ctx.guild: raise OutOfServer() guild: Guild = ctx.guild members: List[Member] = guild.members await ctx.send(random.choice(members).mention)