Example #1
0
    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))
Example #2
0
    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}")
Example #3
0
    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())
Example #4
0
    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())
Example #5
0
    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.")
Example #6
0
    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)
Example #7
0
    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)
Example #8
0
 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)
Example #9
0
 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)