(timer): Better timer listing UI.
This commit is contained in:
@@ -49,49 +49,57 @@ async def cmd_timer(ctx: Context, flags):
|
|||||||
if channel is None:
|
if channel is None:
|
||||||
# Author is not in a voice channel, and they did not select a channel
|
# Author is not in a voice channel, and they did not select a channel
|
||||||
# Display the server timers they can see
|
# Display the server timers they can see
|
||||||
# TODO: Write UI
|
|
||||||
timers = Timer.fetch_guild_timers(ctx.guild.id)
|
timers = Timer.fetch_guild_timers(ctx.guild.id)
|
||||||
timers = [
|
timers = [
|
||||||
timer for timer in timers
|
timer for timer in timers
|
||||||
if timer.channel and timer.channel.permissions_for(ctx.author).view_channel
|
if timer.channel and timer.channel.permissions_for(ctx.author).view_channel
|
||||||
]
|
]
|
||||||
if not timers:
|
if not timers:
|
||||||
return await ctx.error_reply(
|
if await guild_admin.run(ctx):
|
||||||
"There are no available timers!"
|
return await ctx.error_reply(
|
||||||
)
|
"No timers are running yet!\n"
|
||||||
|
f"Start a timer by joining a voice channel and running e.g. `{ctx.best_prefix}pomodoro 50, 10`.\n"
|
||||||
|
f"See `{ctx.best_prefix}help pomodoro for detailed usage."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return await ctx.error_reply(
|
||||||
|
"No timers are running!\n"
|
||||||
|
f"You can ask an admin to start one using `{ctx.best_prefix}pomodoro`."
|
||||||
|
)
|
||||||
# Build a summary list
|
# Build a summary list
|
||||||
timer_strings = []
|
timer_strings = []
|
||||||
for timer in timers:
|
for timer in timers:
|
||||||
stage = timer.current_stage
|
stage = timer.current_stage
|
||||||
stage_str = "**{}** minutes focus with **{}** minutes break".format(
|
stage_str = "(**`{}m`** focus, **`{}m`** break)".format(
|
||||||
timer.focus_length // 60, timer.break_length // 60
|
int(timer.focus_length // 60), int(timer.break_length // 60)
|
||||||
)
|
)
|
||||||
|
if len(timer.members) > 1:
|
||||||
|
member_str = "**{}** members are ".format(len(timer.members))
|
||||||
|
elif len(timer.members) == 1:
|
||||||
|
member_str = "{} is ".format(timer.members[0].mention)
|
||||||
|
else:
|
||||||
|
member_str = ""
|
||||||
remaining = (stage.end - utc_now()).total_seconds()
|
remaining = (stage.end - utc_now()).total_seconds()
|
||||||
|
|
||||||
memberstr = ', '.join(member.mention for member in timer.members[:20])
|
|
||||||
if len(timer.members) > 20:
|
|
||||||
memberstr += '...'
|
|
||||||
|
|
||||||
timer_strings.append(
|
timer_strings.append(
|
||||||
("{}: {}\n"
|
("{} {}\n"
|
||||||
"Currently in `{}`, with `{:02}:{:02}` remaining.\n"
|
"{}urrently **{}** with `{:02}:{:02}` left.").format(
|
||||||
"{}").format(
|
|
||||||
timer.channel.mention,
|
timer.channel.mention,
|
||||||
stage_str,
|
stage_str,
|
||||||
stage.name,
|
member_str + 'c' if member_str else 'C',
|
||||||
|
"focusing" if stage.name == "FOCUS" else "resting",
|
||||||
int(remaining // 3600),
|
int(remaining // 3600),
|
||||||
int((remaining // 60) % 60),
|
int((remaining // 60) % 60),
|
||||||
memberstr
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
blocks = [
|
blocks = [
|
||||||
'\n\n'.join(timer_strings[i:i+4])
|
'\n\n'.join(timer_strings[i:i+10])
|
||||||
for i in range(0, len(timer_strings), 4)
|
for i in range(0, len(timer_strings), 10)
|
||||||
]
|
]
|
||||||
embeds = [
|
embeds = [
|
||||||
discord.Embed(
|
discord.Embed(
|
||||||
title="Pomodoro Timers",
|
title="Study Timers",
|
||||||
description=block,
|
description=block,
|
||||||
colour=discord.Colour.orange()
|
colour=discord.Colour.orange()
|
||||||
)
|
)
|
||||||
@@ -105,7 +113,7 @@ async def cmd_timer(ctx: Context, flags):
|
|||||||
if timer is None:
|
if timer is None:
|
||||||
# No timer in this channel
|
# No timer in this channel
|
||||||
return await ctx.error_reply(
|
return await ctx.error_reply(
|
||||||
f"{channel.mention} doesn't have a timer!"
|
f"{channel.mention} doesn't have a timer running!"
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
# We have a timer
|
# We have a timer
|
||||||
@@ -162,7 +170,7 @@ async def _pomo_admin(ctx, flags):
|
|||||||
args = ctx.args
|
args = ctx.args
|
||||||
if ctx.args:
|
if ctx.args:
|
||||||
splits = ctx.args.split(maxsplit=1)
|
splits = ctx.args.split(maxsplit=1)
|
||||||
assume_channel = not splits[0].endswith(',')
|
assume_channel = not splits[0].contains(',')
|
||||||
assume_channel = assume_channel and not (channel and len(splits[0]) < 5)
|
assume_channel = assume_channel and not (channel and len(splits[0]) < 5)
|
||||||
assume_channel = assume_channel and (splits[0].strip('#<>').isdigit() or len(splits[0]) > 10)
|
assume_channel = assume_channel and (splits[0].strip('#<>').isdigit() or len(splits[0]) > 10)
|
||||||
if assume_channel:
|
if assume_channel:
|
||||||
|
|||||||
Reference in New Issue
Block a user