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
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})'
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))
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)
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)
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)
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)))
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))