97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
import asyncio
|
|
import string
|
|
|
|
import disnake
|
|
import youtube_transcript_api
|
|
|
|
from state import client, kill, 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:
|
|
count = min(min_messages, len(messages))
|
|
if count == 1:
|
|
await messages.pop().delete()
|
|
else:
|
|
await message.channel.delete_messages(
|
|
[messages.pop() for _ in range(count)]
|
|
)
|
|
except Exception:
|
|
pass
|
|
|
|
if (message.guild.voice_client.source.id != initial_id) or kill["transcript"]:
|
|
kill["transcript"] = False
|
|
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: int):
|
|
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)
|