add t20 command
This commit is contained in:
parent
20e1339976
commit
9c29b8067d
miyu_bot/commands
@ -1,6 +1,9 @@
|
|||||||
|
import asyncio
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
import aiohttp
|
||||||
|
import dateutil.parser
|
||||||
import discord
|
import discord
|
||||||
import pytz
|
import pytz
|
||||||
from d4dj_utils.master.event_master import EventMaster, EventState
|
from d4dj_utils.master.event_master import EventMaster, EventState
|
||||||
@ -14,6 +17,7 @@ from miyu_bot.commands.common.emoji import attribute_emoji_ids_by_attribute_id,
|
|||||||
from miyu_bot.commands.common.formatting import format_info
|
from miyu_bot.commands.common.formatting import format_info
|
||||||
from miyu_bot.commands.common.fuzzy_matching import romanize
|
from miyu_bot.commands.common.fuzzy_matching import romanize
|
||||||
from miyu_bot.commands.common.master_asset_manager import MasterFilter
|
from miyu_bot.commands.common.master_asset_manager import MasterFilter
|
||||||
|
from miyu_bot.commands.common.reaction_message import run_paged_message
|
||||||
|
|
||||||
|
|
||||||
class Event(commands.Cog):
|
class Event(commands.Cog):
|
||||||
@ -109,7 +113,8 @@ class Event(commands.Cog):
|
|||||||
def format_time(t: dt.datetime):
|
def format_time(t: dt.datetime):
|
||||||
return str(t.replace(microsecond=0))
|
return str(t.replace(microsecond=0))
|
||||||
|
|
||||||
embed.add_field(name='Asia/Tokyo', value=format_time(dt.datetime.now(pytz.timezone('Asia/Tokyo'))), inline=False)
|
embed.add_field(name='Asia/Tokyo', value=format_time(dt.datetime.now(pytz.timezone('Asia/Tokyo'))),
|
||||||
|
inline=False)
|
||||||
|
|
||||||
if arg:
|
if arg:
|
||||||
try:
|
try:
|
||||||
@ -194,6 +199,29 @@ class Event(commands.Cog):
|
|||||||
except ValueError:
|
except ValueError:
|
||||||
return max(masters.events.values(ctx), key=lambda v: v.start_datetime)
|
return max(masters.events.values(ctx), key=lambda v: v.start_datetime)
|
||||||
|
|
||||||
|
@commands.command(name='t20',
|
||||||
|
aliases=['top20', 'top_20'],
|
||||||
|
description='Displays the top 20 in the main leaderboard',
|
||||||
|
help='!t20')
|
||||||
|
async def time_left(self, ctx: commands.Context):
|
||||||
|
async with aiohttp.ClientSession() as session:
|
||||||
|
async with session.get('http://www.projectdivar.com/eventdata/t20') as resp:
|
||||||
|
leaderboard = await resp.json(encoding='utf-8')
|
||||||
|
|
||||||
|
latest = self.get_latest_event(ctx)
|
||||||
|
logo = discord.File(latest.logo_path, filename='logo.png')
|
||||||
|
embed = discord.Embed(title=f'{latest.name} t20').set_thumbnail(url=f'attachment://logo.png')
|
||||||
|
max_points_digits = len(str(leaderboard[0]['points']))
|
||||||
|
nl = "\n"
|
||||||
|
update_date = dateutil.parser.isoparse(leaderboard[0]["date"]).replace(microsecond=0)
|
||||||
|
update_date = update_date.astimezone(pytz.timezone('Asia/Tokyo'))
|
||||||
|
header = f'Updated {update_date}\n\nRank {"Points".ljust(max_points_digits)} Name'
|
||||||
|
listing = [
|
||||||
|
f'{str(player["rank"]).ljust(4)} {str(player["points"]).ljust(max_points_digits)} {player["name"].replace(nl, "")}'
|
||||||
|
for player in leaderboard]
|
||||||
|
paged = run_paged_message(ctx, embed, listing, header=header, page_size=10, files=[logo], numbered=False)
|
||||||
|
asyncio.ensure_future(paged)
|
||||||
|
|
||||||
|
|
||||||
def setup(bot):
|
def setup(bot):
|
||||||
bot.add_cog(Event(bot))
|
bot.add_cog(Event(bot))
|
||||||
|
@ -153,7 +153,7 @@ class Music(commands.Cog):
|
|||||||
sort = 'relevance'
|
sort = 'relevance'
|
||||||
if not arg:
|
if not arg:
|
||||||
sort = 'default'
|
sort = 'default'
|
||||||
elif arg == 'duration':
|
elif arg == 'sort=duration':
|
||||||
sort = 'duration'
|
sort = 'duration'
|
||||||
arg = ''
|
arg = ''
|
||||||
songs = masters.music.get_sorted(arg, ctx)
|
songs = masters.music.get_sorted(arg, ctx)
|
||||||
@ -169,9 +169,8 @@ class Music(commands.Cog):
|
|||||||
songs = sorted(songs, key=lambda s: -s.default_order)
|
songs = sorted(songs, key=lambda s: -s.default_order)
|
||||||
listing = [f'{song.name}{" (" + song.special_unit_name + ")" if song.special_unit_name else ""}' for song in
|
listing = [f'{song.name}{" (" + song.special_unit_name + ")" if song.special_unit_name else ""}' for song in
|
||||||
[*songs[1:], songs[0]]] # lesson is always first
|
[*songs[1:], songs[0]]] # lesson is always first
|
||||||
asyncio.ensure_future(run_paged_message(ctx, f'Song Search "{arg}"' if arg else 'Songs', listing))
|
embed = discord.Embed(title='Song Search "{arg}"' if arg else 'Songs')
|
||||||
|
asyncio.ensure_future(run_paged_message(ctx, embed, listing))
|
||||||
return
|
|
||||||
|
|
||||||
def get_chart_embed_info(self, song):
|
def get_chart_embed_info(self, song):
|
||||||
embeds = []
|
embeds = []
|
||||||
|
@ -18,13 +18,16 @@ async def run_tabbed_message(ctx: Context, message: Message, emojis: List[AnyEmo
|
|||||||
await run_reaction_message(ctx, message, emojis, callback, timeout)
|
await run_reaction_message(ctx, message, emojis, callback, timeout)
|
||||||
|
|
||||||
|
|
||||||
async def run_paged_message(ctx: Context, title: str, content: List[str], page_size: int = 15, numbered: bool = True,
|
async def run_paged_message(ctx: Context, base_embed: discord.Embed, content: List[str], page_size: int = 15,
|
||||||
timeout=300, max_tabbed_pages=4):
|
header='', numbered: bool = True, timeout=300, max_tabbed_pages=4, files=None):
|
||||||
|
if header:
|
||||||
|
header = header + '\n'
|
||||||
|
|
||||||
if max_tabbed_pages > 9:
|
if max_tabbed_pages > 9:
|
||||||
raise ValueError('max_tabbed_pages must be 9 or less.')
|
raise ValueError('max_tabbed_pages must be 9 or less.')
|
||||||
|
|
||||||
if not content:
|
if not content:
|
||||||
embed = discord.Embed(title=title).set_footer(text='Page 0/0')
|
embed = base_embed.copy().set_footer(text='Page 0/0')
|
||||||
await ctx.send(embed=embed)
|
await ctx.send(embed=embed)
|
||||||
return
|
return
|
||||||
|
|
||||||
@ -42,11 +45,13 @@ async def run_paged_message(ctx: Context, title: str, content: List[str], page_s
|
|||||||
return str(item)
|
return str(item)
|
||||||
|
|
||||||
embeds = [
|
embeds = [
|
||||||
discord.Embed(title=title, description='```' + '\n'.join((format_item(i) for i in page)) + '```').set_footer(
|
base_embed.from_dict({
|
||||||
text=f'Page {i + 1}/{len(page_contents)}')
|
**base_embed.to_dict(),
|
||||||
|
'description': '```' + header + '\n'.join((format_item(i) for i in page)) + '```',
|
||||||
|
}).set_footer(text=f'Page {i + 1}/{len(page_contents)}')
|
||||||
for i, page in enumerate(page_contents)]
|
for i, page in enumerate(page_contents)]
|
||||||
|
|
||||||
message = await ctx.send(embed=embeds[0])
|
message = await ctx.send(embed=embeds[0], files=files or [])
|
||||||
|
|
||||||
if len(embeds) == 1:
|
if len(embeds) == 1:
|
||||||
return
|
return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user