示例#1
0
class EventColors(Enum):
    ban = Colour.dark_red()
    unban = Colour.teal()
    kick = Colour.red()
    join = Colour.dark_green()
    leave = Colour.blue()
    delete = Colour.magenta()
    bulk_delete = Colour.dark_magenta()
    edit = Colour.gold()
    name_change = Colour.purple()
    nickname_change = Colour.blurple()
    role_added = Colour.dark_teal()
    role_removed = Colour.orange()
    verified = Colour.light_grey()
示例#2
0
    async def queue(self, ctx: Context):

        session = self.get_session(ctx.guild)

        em = Embed(colour=Colour.dark_green(), title="Upcoming requests")

        for index, track in enumerate(session.queue.requests[:10], 1):
            em.add_field(name=f"{index} - Requested by {track.requester}",
                         value=track.information)

        if not em.fields:
            em.description = "There are currently no requests"

        await ctx.send(embed=em)
示例#3
0
    def playing_message(self) -> Dict[str, Union[Embed, File]]:
        self._cover.seek(0)

        em = Embed(
            colour=Colour.dark_green(),
            title=self._title,
            description=f'{self._album} - ({self._date})'
        )
        em.set_author(name=self._artist)
        em.set_thumbnail(url='attachment://cover.jpg')

        return {
            'embed': em,
            'file': File(self._cover, 'cover.jpg')
        }
示例#4
0
    async def repeat(self, ctx: Context):
        """Repeats the currently playing track."""

        session = self.get_session(ctx.guild)

        if ctx.author in session.repeat_requests:
            raise CommandError('You have already requested to repeat.')

        session.repeat_requests.append(ctx.author)
        repeats_needed = len(list(session.listeners)) // 2 + 1

        if len(session.repeat_requests) >= repeats_needed:
            session.queue.add_request(session.current_track, at_start=True)

        else:
            em = Embed(colour=Colour.dark_green(),
                       title='Repeat track',
                       description=f'You currently need '
                       f'**{repeats_needed - len(session.repeat_requests)}** '
                       f'more votes to repeat this track.')

            await ctx.send(embed=em)
示例#5
0
    async def skip(self, ctx: Context):
        """Skips the currently playing track."""

        session = self.get_session(ctx.guild)

        if ctx.author in session.skip_requests:
            raise CommandError("You have already requested to skip.")

        session.skip_requests.append(ctx.author)
        skips_needed = len(list(session.listeners)) // 2 + 1

        if len(session.skip_requests) >= skips_needed:
            session.voice.stop()

        else:
            em = Embed(colour=Colour.dark_green(),
                       title="Skip video",
                       description=f"You currently need "
                       f"**{skips_needed - len(session.skip_requests)}** "
                       f"more votes to skip this track.")

            await ctx.send(embed=em)
示例#6
0
async def on_guild_join(guild):
    global separator, data
    QMrole = discord.utils.find(lambda r: r.name == 'Queue Manager',
                                guild.roles)
    if not QMrole:
        QMrole = await guild.create_role(name='Queue Manager',
                                         permissions=Permissions(285346816),
                                         colour=Colour.dark_green(),
                                         hoist=True)
    try:
        await guild.owner.add_roles(QMrole)
    except discord.errors.Forbidden:
        print('Bot does not have "Manage Role" Permissions')

    print('\n{} online in {} (id: {}):'.format(bot.user.name, guild.name,
                                               guild.id))
    print('Loading data')
    try:
        data[guild.id] = loadFromJson(guild)
    except FileNotFoundError:
        print('No saved data found. Creating data file.')
        data[guild.id] = {
            'serverID': guild.id,
            'servername': guild.name,
            'queue': [],
            'config': {
                'autofollow': True
            }
        }
    saveToJson(guild, data[guild.id])
    for channel in guild.text_channels:
        #print(channel.name)
        if queueManagerPresent(guild):
            await channel.send(
                '{} is online for your queueing pleasure'.format(
                    bot.user.display_name))
示例#7
0
class MP3Track(Track):
    _embed_colour = Colour.dark_green()
    _track_type = 'MP3 file'

    _title = _artist = _album = _date = 'Unknown'

    def __init__(
            self,
            source,
            config: SubRedis,
            volume: float = 0.15,
            requester: User = None,
            **kwargs
    ):
        self.config = config
        self._cover = open(self.config.hget("config:resources", "default_mp3_art"), 'rb')
        super().__init__(source, config, volume, requester, **kwargs)

        tags = MP3(source)

        self.length = tags.info.length

        for attribute, tag in (
            ('_title', 'TIT2'),
            ('_artist', 'TPE1'),
            ('_album', 'TALB'),
            ('_date', 'TDRC'),
            ('_cover', 'APIC:'),
            ('_cover', 'APIC')
        ):
            data = tags.get(tag)
            if data is not None:
                if attribute != '_cover':
                    self.__setattr__(attribute, data[0])
                else:
                    self.__setattr__(attribute, BytesIO(data.data))

    @property
    def information(self) -> str:
        return f'**{self._title}** by **{self._artist}**'

    @property
    def status_information(self) -> str:
        return f"{self._title} from {self._album}"

    @property
    def playing_message(self) -> Dict[str, Union[Embed, File]]:
        self._cover.seek(0)

        em = Embed(
            colour=Colour.dark_green(),
            title=self._title,
            description=f'{self._album} - ({self._date})'
        )
        em.set_author(name=self._artist)
        em.set_thumbnail(url='attachment://cover.jpg')

        return {
            'embed': em,
            'file': File(self._cover, 'cover.jpg')
        }