add difficulty filter to songs command
This commit is contained in:
parent
3657f8bbaa
commit
ce89600cf1
@ -13,7 +13,7 @@ from d4dj_utils.master.music_master import MusicMaster
|
|||||||
from discord.ext import commands
|
from discord.ext import commands
|
||||||
|
|
||||||
from main import asset_manager, masters
|
from main import asset_manager, masters
|
||||||
from miyu_bot.commands.common.argument_parsing import parse_arguments, ArgumentError
|
from miyu_bot.commands.common.argument_parsing import parse_arguments, ArgumentError, list_operator_for
|
||||||
from miyu_bot.commands.common.emoji import difficulty_emoji_ids
|
from miyu_bot.commands.common.emoji import difficulty_emoji_ids
|
||||||
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
|
||||||
@ -158,17 +158,27 @@ class Music(commands.Cog):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
sort, sort_op = arguments.single('sort', MusicAttribute.DefaultOrder,
|
sort, sort_op = arguments.single('sort', MusicAttribute.DefaultOrder,
|
||||||
allowed_operators=['<', '>', '='], converter=music_attribute_names)
|
allowed_operators=['<', '>', '='], converter=music_attribute_aliases)
|
||||||
reverse_sort = sort_op == '<'
|
reverse_sort = sort_op == '<'
|
||||||
display, _ = arguments.single('display', sort, allowed_operators=['='], converter=music_attribute_names)
|
display, _ = arguments.single(['display', 'disp'], sort, allowed_operators=['='],
|
||||||
|
converter=music_attribute_aliases)
|
||||||
|
|
||||||
|
def difficulty_converter(d):
|
||||||
|
return int(d[:-1]) + 0.5 if d[-1] == '+' else int(d)
|
||||||
|
|
||||||
|
difficulty = arguments.repeatable(['difficulty', 'diff', 'level'], is_list=True, converter=difficulty_converter)
|
||||||
arguments.require_all_arguments_used()
|
arguments.require_all_arguments_used()
|
||||||
except ArgumentError as e:
|
except ArgumentError as e:
|
||||||
await ctx.send(str(e))
|
await ctx.send(str(e))
|
||||||
return
|
return
|
||||||
|
|
||||||
|
for value, op in difficulty:
|
||||||
|
operator = list_operator_for(op)
|
||||||
|
songs = [song for song in songs if operator(song.charts[4].level, value)]
|
||||||
|
|
||||||
if not (arguments.text_argument and sort == MusicAttribute.DefaultOrder):
|
if not (arguments.text_argument and sort == MusicAttribute.DefaultOrder):
|
||||||
songs = sorted(songs, key=lambda s: sort.get_from_music(s))
|
songs = sorted(songs, key=lambda s: sort.get_from_music(s))
|
||||||
if sort == MusicAttribute.DefaultOrder:
|
if sort == MusicAttribute.DefaultOrder and songs and songs[0].id == 1:
|
||||||
songs = [*songs[1:], songs[0]]
|
songs = [*songs[1:], songs[0]]
|
||||||
if reverse_sort:
|
if reverse_sort:
|
||||||
songs = reversed(songs)
|
songs = reversed(songs)
|
||||||
@ -177,7 +187,8 @@ class Music(commands.Cog):
|
|||||||
for song in songs:
|
for song in songs:
|
||||||
display_prefix = display.get_formatted_from_music(song)
|
display_prefix = display.get_formatted_from_music(song)
|
||||||
if display_prefix:
|
if display_prefix:
|
||||||
listing.append(f'{display_prefix} : {song.name}{" (" + song.special_unit_name + ")" if song.special_unit_name else ""}')
|
listing.append(
|
||||||
|
f'{display_prefix} : {song.name}{" (" + song.special_unit_name + ")" if song.special_unit_name else ""}')
|
||||||
else:
|
else:
|
||||||
listing.append(f'{song.name}{" (" + song.special_unit_name + ")" if song.special_unit_name else ""}')
|
listing.append(f'{song.name}{" (" + song.special_unit_name + ")" if song.special_unit_name else ""}')
|
||||||
|
|
||||||
@ -350,7 +361,7 @@ class MusicAttribute(enum.Enum):
|
|||||||
}[self]
|
}[self]
|
||||||
|
|
||||||
|
|
||||||
music_attribute_names = {
|
music_attribute_aliases = {
|
||||||
'default': MusicAttribute.DefaultOrder,
|
'default': MusicAttribute.DefaultOrder,
|
||||||
'name': MusicAttribute.Name,
|
'name': MusicAttribute.Name,
|
||||||
'id': MusicAttribute.Id,
|
'id': MusicAttribute.Id,
|
||||||
@ -358,6 +369,7 @@ music_attribute_names = {
|
|||||||
'unit': MusicAttribute.Unit,
|
'unit': MusicAttribute.Unit,
|
||||||
'level': MusicAttribute.Level,
|
'level': MusicAttribute.Level,
|
||||||
'difficulty': MusicAttribute.Level,
|
'difficulty': MusicAttribute.Level,
|
||||||
|
'diff': MusicAttribute.Level,
|
||||||
'duration': MusicAttribute.Duration,
|
'duration': MusicAttribute.Duration,
|
||||||
'length': MusicAttribute.Duration,
|
'length': MusicAttribute.Duration,
|
||||||
'date': MusicAttribute.Date,
|
'date': MusicAttribute.Date,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user