Compare commits
8 Commits
dfe05cc548
...
655b552c10
Author | SHA1 | Date | |
---|---|---|---|
655b552c10 | |||
d52266300c | |||
bb70e5d057 | |||
8cd3115ed2 | |||
c69f1c7d26 | |||
f9489a869d | |||
8b871fb102 | |||
5295d75257 |
@ -5,6 +5,7 @@ import constants
|
|||||||
|
|
||||||
class Command(enum.Enum):
|
class Command(enum.Enum):
|
||||||
CLEAR = "clear"
|
CLEAR = "clear"
|
||||||
|
CURRENT = "current"
|
||||||
EXECUTE = "execute"
|
EXECUTE = "execute"
|
||||||
FAST_FORWARD = "ff"
|
FAST_FORWARD = "ff"
|
||||||
HELP = "help"
|
HELP = "help"
|
||||||
|
@ -196,7 +196,7 @@ async def queue_or_play(message, edited=False):
|
|||||||
description=description,
|
description=description,
|
||||||
color=constants.EMBED_COLOR,
|
color=constants.EMBED_COLOR,
|
||||||
)
|
)
|
||||||
if formatted_duration:
|
if formatted_duration and len(players[message.guild.id].queue) > 1:
|
||||||
e.set_footer(text=f"{formatted_duration} in total")
|
e.set_footer(text=f"{formatted_duration} in total")
|
||||||
return e
|
return e
|
||||||
|
|
||||||
@ -447,9 +447,24 @@ def play_next(message, once=False, first=False):
|
|||||||
message.guild.voice_client.play(
|
message.guild.voice_client.play(
|
||||||
queued.player, after=lambda e: play_after_callback(e, message, once)
|
queued.player, after=lambda e: play_after_callback(e, message, once)
|
||||||
)
|
)
|
||||||
client.loop.create_task(
|
|
||||||
utils.channel_send(message, queued.format(show_queuer=not first))
|
embed = disnake.Embed(
|
||||||
|
color=constants.EMBED_COLOR,
|
||||||
|
title=queued.player.title,
|
||||||
|
url=queued.player.original_url,
|
||||||
)
|
)
|
||||||
|
embed.add_field(name="Volume", value=f"{int(queued.player.volume*100)}%")
|
||||||
|
embed.add_field(name="Views", value=f"{queued.player.view_count:,}")
|
||||||
|
embed.add_field(
|
||||||
|
name="Queuer",
|
||||||
|
value=players[message.guild.id].current.trigger_message.author.mention,
|
||||||
|
)
|
||||||
|
embed.set_image(queued.player.thumbnail_url)
|
||||||
|
|
||||||
|
if first:
|
||||||
|
client.loop.create_task(utils.reply(message, embed=embed))
|
||||||
|
else:
|
||||||
|
client.loop.create_task(utils.channel_send(message, embed=embed))
|
||||||
|
|
||||||
|
|
||||||
async def ensure_joined(message):
|
async def ensure_joined(message):
|
||||||
|
@ -28,6 +28,7 @@ RELOADABLE_MODULES = [
|
|||||||
"constants",
|
"constants",
|
||||||
"core",
|
"core",
|
||||||
"events",
|
"events",
|
||||||
|
"extra",
|
||||||
"tasks",
|
"tasks",
|
||||||
"utils",
|
"utils",
|
||||||
"voice",
|
"voice",
|
||||||
|
3
core.py
3
core.py
@ -48,6 +48,7 @@ async def on_message(message, edited=False):
|
|||||||
case C.RELOAD if message.author.id in constants.OWNERS:
|
case C.RELOAD if message.author.id in constants.OWNERS:
|
||||||
reloaded_modules = set()
|
reloaded_modules = set()
|
||||||
rreload(reloaded_modules, __import__("core"))
|
rreload(reloaded_modules, __import__("core"))
|
||||||
|
rreload(reloaded_modules, __import__("extra"))
|
||||||
for module in filter(
|
for module in filter(
|
||||||
lambda v: inspect.ismodule(v)
|
lambda v: inspect.ismodule(v)
|
||||||
and v.__name__ in constants.RELOADABLE_MODULES,
|
and v.__name__ in constants.RELOADABLE_MODULES,
|
||||||
@ -120,7 +121,7 @@ async def on_message(message, edited=False):
|
|||||||
await commands.bot.help(message)
|
await commands.bot.help(message)
|
||||||
case C.UPTIME:
|
case C.UPTIME:
|
||||||
await commands.bot.uptime(message)
|
await commands.bot.uptime(message)
|
||||||
case C.PLAYING:
|
case C.PLAYING | C.CURRENT:
|
||||||
await commands.voice.playing(message)
|
await commands.voice.playing(message)
|
||||||
case C.FAST_FORWARD:
|
case C.FAST_FORWARD:
|
||||||
await commands.voice.fast_forward(message)
|
await commands.voice.fast_forward(message)
|
||||||
|
91
extra.py
Normal file
91
extra.py
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
import asyncio
|
||||||
|
import string
|
||||||
|
|
||||||
|
import disnake
|
||||||
|
import youtube_transcript_api
|
||||||
|
|
||||||
|
from state import client, players
|
||||||
|
|
||||||
|
|
||||||
|
async def transcript(
|
||||||
|
message, languages=["en"], max_messages=6, min_messages=3, upper=True
|
||||||
|
):
|
||||||
|
initial_id = message.guild.voice_client.source.id
|
||||||
|
transcript_list = youtube_transcript_api.YouTubeTranscriptApi.list_transcripts(
|
||||||
|
initial_id
|
||||||
|
)
|
||||||
|
try:
|
||||||
|
transcript = transcript_list.find_manually_created_transcript(languages).fetch()
|
||||||
|
except Exception:
|
||||||
|
transcript = transcript_list.find_generated_transcript(languages).fetch()
|
||||||
|
await message.channel.send("(autogenerated)")
|
||||||
|
|
||||||
|
messages = []
|
||||||
|
for line in transcript:
|
||||||
|
if (
|
||||||
|
players[message.guild.id].current.player.original.progress
|
||||||
|
>= line["start"] + line["duration"]
|
||||||
|
):
|
||||||
|
continue
|
||||||
|
|
||||||
|
while (
|
||||||
|
players[message.guild.id].current.player.original.progress < line["start"]
|
||||||
|
):
|
||||||
|
await asyncio.sleep(0.2)
|
||||||
|
|
||||||
|
messages.insert(
|
||||||
|
0,
|
||||||
|
await message.channel.send(line["text"].upper() if upper else line["text"]),
|
||||||
|
)
|
||||||
|
if len(messages) > max_messages:
|
||||||
|
try:
|
||||||
|
await message.channel.delete_messages(
|
||||||
|
[messages.pop() for _ in range(max_messages - min_messages)]
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if message.guild.voice_client.source.id != initial_id:
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def messages_per_second(limit=500):
|
||||||
|
oldest = 2**64
|
||||||
|
newest = 0
|
||||||
|
guilds = set()
|
||||||
|
members = set()
|
||||||
|
cached_messages = list(client.cached_messages)[-limit:]
|
||||||
|
|
||||||
|
for message in cached_messages:
|
||||||
|
if message.guild:
|
||||||
|
guilds.add(message.guild.id)
|
||||||
|
members.add(message.author.id)
|
||||||
|
|
||||||
|
t = message.created_at.timestamp()
|
||||||
|
if t < oldest:
|
||||||
|
oldest = t
|
||||||
|
elif t > newest:
|
||||||
|
newest = t
|
||||||
|
|
||||||
|
average = round(len(cached_messages) / (newest - oldest), 1)
|
||||||
|
if average == 1.0:
|
||||||
|
average = 1
|
||||||
|
print(
|
||||||
|
f"I am receiving **{average} {'message' if average == 1 else 'messages'} per second** "
|
||||||
|
f"from **{len(members)} {'member' if len(members) == 1 else 'members'}** across **{len(guilds)} {'guild' if len(guilds) == 1 else 'guilds'}**"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def auto_count(channel_id):
|
||||||
|
if (channel := await client.fetch_channel(channel_id)) and isinstance(
|
||||||
|
channel, disnake.TextChannel
|
||||||
|
):
|
||||||
|
last_message = (await channel.history(limit=1).flatten())[0]
|
||||||
|
try:
|
||||||
|
result = str(
|
||||||
|
int("".join(filter(lambda d: d in string.digits, last_message.content)))
|
||||||
|
+ 1
|
||||||
|
)
|
||||||
|
except Exception:
|
||||||
|
result = "where number"
|
||||||
|
await channel.send(result)
|
@ -2,4 +2,5 @@ audioop-lts
|
|||||||
disnake
|
disnake
|
||||||
disnake_paginator
|
disnake_paginator
|
||||||
PyNaCl
|
PyNaCl
|
||||||
|
youtube_transcript_api
|
||||||
yt-dlp
|
yt-dlp
|
||||||
|
@ -39,6 +39,7 @@ class YTDLSource(disnake.PCMVolumeTransformer):
|
|||||||
|
|
||||||
self.description = data.get("description")
|
self.description = data.get("description")
|
||||||
self.duration = data.get("duration")
|
self.duration = data.get("duration")
|
||||||
|
self.id = data.get("id")
|
||||||
self.original_url = data.get("original_url")
|
self.original_url = data.get("original_url")
|
||||||
self.thumbnail_url = data.get("thumbnail")
|
self.thumbnail_url = data.get("thumbnail")
|
||||||
self.title = data.get("title")
|
self.title = data.get("title")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user