Esempio n. 1
0
	def _craft_album_embed(self, artist: FullArtist, album: FullAlbum):
		e = self._new_embed(title=album.name, url=album.link)

		e.set_author(name=artist.name, url=artist.link, icon_url=get_url(artist.images))
		e.set_footer(text=album.uri, icon_url=SPOTIFY_ICON_URL)
		e.set_image(url=get_url(album.images))

		e.add_field(name='Songs', value=str(len(album.tracks)))

		runtime = timedelta()
		for track in album.tracks:
			runtime += track.duration

		e.add_field(name='Runtime', value='{0} minutes'.format(round(runtime.total_seconds() / 60)))

		e.add_field(name='Popularity', value='{0}%'.format(album.popularity))
		e.add_field(name='Released', value=pretty_datetime(album.release_date, ignore_time=True))

		if album.genres:
			e.add_field(
				name='Genres',
				value=', '.join(album.genres)
			)

		return e
Esempio n. 2
0
	def format_commit(self, commit):
		short, _, _ = commit.message.partition('\n')
		short_sha2 = commit.hex[0:6]
		tz = timezone(timedelta(minutes=commit.commit_time_offset))
		time = datetime.fromtimestamp(commit.commit_time).replace(tzinfo=tz)
		offset = pretty_datetime(time.astimezone(timezone.utc).replace(tzinfo=None), ignore_time=True)
		return f'[`{short_sha2}`]({GITHUB_LINK}/commit/{commit.hex}) {short} ({offset})'
Esempio n. 3
0
	async def remindme(self, ctx, *, when_and_what: ReminderConverter()):
		'''Create a new reminder.'''

		now, when, message = when_and_what

		if when < now:
			raise commands.CommandError('Specified time is in the past.')

		if when - now > MAX_DELTA:
			raise commands.CommandError('Sorry, can\'t remind in more than a year in the future.')

		if message is not None and len(message) > 1024:
			raise commands.CommandError('Sorry, keep the message below 1024 characters!')

		count = await self.db.fetchval('SELECT COUNT(id) FROM remind WHERE user_id=$1', ctx.author.id)
		if count > MAX_REMINDERS:
			raise commands.CommandError(f'Sorry, you can\'t have more than {MAX_REMINDERS} active reminders at once.')

		await self.db.execute(
			'INSERT INTO remind (guild_id, channel_id, user_id, made_on, remind_on, message) VALUES ($1, $2, $3, $4, $5, $6)',
			ctx.guild.id, ctx.channel.id, ctx.author.id, now, when, message
		)

		self.timer.maybe_restart(when)

		remind_in = when - now
		remind_in += timedelta(microseconds=1000000 - (remind_in.microseconds % 1000000))

		await ctx.send('You will be reminded in {}.'.format(pretty_timedelta(remind_in)))

		log.info('%s set a reminder for %s.', po(ctx.author), pretty_datetime(when))
Esempio n. 4
0
    async def info(self, ctx, *, tag_name: TagViewConverter()):
        '''See stats about a tag.'''

        tag_name, record = tag_name

        owner = ctx.guild.get_member(record.get('user_id'))

        if owner is None:
            nick = 'Unknown User'
            avatar = ctx.guild.icon_url
        else:
            nick = owner.display_name
            avatar = owner.avatar_url

        e = discord.Embed(description=f"**{record.get('name')}**", )

        e.set_author(name=nick, icon_url=avatar)
        e.add_field(name='Owner', value=owner.mention if owner else nick)

        rank = await self.db.fetchval(
            'SELECT COUNT(id) FROM tag WHERE guild_id=$1 AND uses > $2',
            ctx.guild.id,
            record.get('uses') + 1)

        e.add_field(name='Rank', value=f'#{rank + 1}')

        e.add_field(name='Uses', value=record.get('uses'))

        alias = record.get('alias')
        created_at = record.get('created_at')
        viewed_at = record.get('viewed_at')
        edited_at = record.get('edited_at')

        if alias is not None:
            e.add_field(name='Alias', value=alias)

        e.add_field(name='Created at', value=pretty_datetime(created_at))

        if viewed_at:
            e.add_field(name='Last viewed at',
                        value=pretty_datetime(viewed_at))

        if edited_at:
            e.add_field(name='Last edited at',
                        value=pretty_datetime(edited_at))

        await ctx.send(embed=e)
Esempio n. 5
0
    async def craft_page(self, e, page, entries):
        entry = entries[0]

        e.description = ''

        for field in dir(entry):
            if field.startswith('_'):
                continue

            try:
                attr = getattr(entry, field)
            except AttributeError:
                continue

            if callable(attr):
                continue

            if isinstance(attr, int):
                e.add_field(name=field,
                            value='`{}`'.format(str(attr)),
                            inline=False)

            elif isinstance(attr, str):
                e.add_field(name=field, value=attr, inline=False)

            elif isinstance(attr, datetime):
                e.add_field(name=field,
                            value=pretty_datetime(attr),
                            inline=False)

            elif isinstance(attr,
                            list) and len(attr) and field not in ('members', ):
                lst = list()
                for item in attr:
                    if hasattr(item, 'mention'):
                        lst.append(item.mention)
                    elif hasattr(item, 'name'):
                        lst.append(item.name)
                    elif hasattr(item, 'id'):
                        lst.append(item.id)

                if len(lst):
                    e.add_field(name=field,
                                value=shorten(' '.join(lst), 1024),
                                inline=False)

        if hasattr(entry, 'name'):
            e.title = entry.name

        if hasattr(entry, 'mention'):
            e.description = entry.mention

        if hasattr(entry, 'avatar_url'):
            e.set_thumbnail(url=entry.avatar_url)
        elif hasattr(entry, 'icon_url'):
            e.set_thumbnail(url=entry.icon_url)
Esempio n. 6
0
    async def info(self, ctx, *, member: discord.Member = None):
        '''Display information about user or self.'''

        member = member or ctx.author

        e = discord.Embed(description='')

        if member.bot:
            e.description = 'This account is a bot.\n\n'

        e.description += member.mention

        e.add_field(name='Status', value=member.status)

        if member.activity:
            e.add_field(name='Activity', value=member.activity.name)

        e.set_author(name=str(member), icon_url=member.avatar_url)

        now = datetime.utcnow()
        created = member.created_at
        joined = member.joined_at

        e.add_field(name='Account age',
                    value='{0} • Created {1}'.format(
                        pretty_timedelta(now - created),
                        pretty_datetime(created)),
                    inline=False)

        e.add_field(name='Member for',
                    value='{0} • Joined {1}'.format(
                        pretty_timedelta(now - joined),
                        pretty_datetime(joined)))

        if len(member.roles) > 1:
            e.add_field(name='Roles',
                        value=' '.join(role.mention
                                       for role in reversed(member.roles[1:])),
                        inline=False)

        e.set_footer(text='ID: ' + str(member.id))

        await ctx.send(embed=e)
Esempio n. 7
0
    async def craft_page(self, e: discord.Embed, page, entries):
        e.description = f'{len(self.entries)} active tempban(s).'

        now = datetime.utcnow()

        for record in entries:
            _id = record.get('id')

            userdata = loads(record.get('userdata'))
            name = userdata['name']
            discrim = userdata['discriminator']

            user_id = record.get('user_id')

            banner = self.bot.get_user(record.get('mod_id'))
            when = record.get('created_at')
            duration = record.get('duration')

            e.add_field(
                name=f'{_id}: {name}#{discrim} ({user_id})',
                value='Banned: {0}\nBanner: {1}\nDuration: {2}\nUnban in {3}'.
                format(pretty_datetime(when), banner or 'UNKNOWN',
                       pretty_timedelta(duration),
                       pretty_timedelta(now - when + duration)))
Esempio n. 8
0
 def stamp(self):
     return 'TIME: {}\nGUILD: {}\nCHANNEL: #{}\nAUTHOR: {}\nMESSAGE ID: {}'.format(
         pretty_datetime(self.message.created_at), po(self.guild),
         po(self.channel), po(self.author), str(self.message.id))