Compare commits

...

4 Commits

3 changed files with 47 additions and 12 deletions

View File

@ -1,6 +1,7 @@
import re
import arguments
import commands
import utils
@ -16,14 +17,27 @@ async def clear(message):
type=lambda c: arguments.range_type(c, min=1, max=1000),
help="amount of messages to delete",
)
parser.add_argument(
group = parser.add_mutually_exclusive_group()
group.add_argument(
"-r",
"--regex",
required=False,
help="delete messages with content matching this regex",
)
group.add_argument(
"-c",
"--contains",
required=False,
help="delete messages with content containing this substring",
)
parser.add_argument(
"-i",
"--case-insensitive",
action="store_true",
help="ignore case sensitivity when deleting messages",
)
parser.add_argument(
"-a",
"--author-id",
type=int,
action="append",
@ -44,10 +58,19 @@ async def clear(message):
if not (args := await parser.parse_args(message, tokens)):
return
regex = None
if r := args.regex:
regex = re.compile(r, re.IGNORECASE if args.case_insensitive else 0)
def check(m):
c = []
if r := args.regex:
c.append(re.match(r, m.content))
if regex:
c.append(regex.search(m.content))
if s := args.contains:
if args.case_insensitive:
c.append(s.lower() in m.content.lower())
else:
c.append(s in m.content)
if i := args.author_id:
c.append(m.author.id in i)
if args.reactions:

View File

@ -44,6 +44,12 @@ async def queue_or_play(message):
action="store_true",
help="remove all queued songs",
)
parser.add_argument(
"-n",
"--now",
action="store_true",
help="play the specified song immediately",
)
parser.add_argument(
"-t",
"--remove-title",
@ -103,6 +109,10 @@ async def queue_or_play(message):
return
queued = youtubedl.QueuedSong(player, message.author.id)
if args.now:
players[message.guild.id].queue_add_front(queued)
else:
players[message.guild.id].queue_add(queued)
if (
@ -111,6 +121,9 @@ async def queue_or_play(message):
):
await utils.reply(message, f"**0.** {queued.format()}")
play_next(message)
elif args.now:
message.guild.voice_client.stop()
await utils.reply(message, f"**0.** {queued.format()}")
else:
await utils.reply(
message,

View File

@ -58,6 +58,9 @@ class QueuedPlayer:
def queue_add(self, item):
self.queue.append(item)
def queue_add_front(self, item):
self.queue.insert(0, item)
class QueuedSong:
def __init__(self, player, queuer):
@ -71,16 +74,12 @@ class QueuedSong:
)
def format_duration(self, duration: int) -> str:
segments = []
hours, duration = divmod(duration, 3600)
if hours > 0:
segments.append(hours)
minutes, duration = divmod(duration, 60)
if minutes > 0:
segments.append(minutes)
if duration > 0:
segments.append(duration)
return f"{':'.join(str(s) for s in segments)}"
segments = [hours, minutes, duration]
if len(segments) == 3 and segments[0] == 0:
del segments[0]
return f"{':'.join(f'{s:0>2}' for s in segments)}"
def __reload_module__():