-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.py
124 lines (110 loc) · 4.82 KB
/
index.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import discord
import os
import subprocess
import asyncio
# Remplacez TOKEN par votre token de bot Discord
TOKEN = "TOKEN"
intents = discord.Intents.default()
intents.message_content = True
client = discord.Client(intents=intents)
# Fonction pour exécuter des commandes shell de manière asynchrone
async def run_command(command):
process = await asyncio.create_subprocess_shell(
command, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
stdout, stderr = await process.communicate()
return stdout.decode(), stderr.decode()
# Fonction pour envoyer des messages longs en fragments tout en respectant la limite Discord
async def send_long_message(channel, message_content):
# Discord a une limite de 2000 caractères, on doit prendre en compte les balises Markdown "```" qui prennent 6 caractères
chunk_size = 1994 # 2000 - 6 (pour les balises ``` qui encadrent le code)
if len(message_content) > chunk_size:
for i in range(0, len(message_content), chunk_size):
await channel.send(f"```{message_content[i:i+chunk_size]}```")
else:
await channel.send(f"```{message_content}```")
@client.event
async def on_ready():
print(f'Bot connecté en tant que {client.user}')
@client.event
async def on_message(message):
if message.author == client.user:
return
# Commande pour lister les formats vidéo disponibles
if message.content.startswith('!formats'):
url = message.content.split(" ")[1]
command = f'yt-dlp -F "{url}"'
embed = discord.Embed(
title="Liste des formats",
description=f"Récupération des formats pour {url}...",
color=discord.Color.blue()
)
await message.channel.send(embed=embed)
stdout, stderr = await run_command(command)
if stdout:
# Envoie la sortie formatée (tableau) en fragments si nécessaire
await send_long_message(message.channel, stdout)
else:
embed = discord.Embed(
title="Erreur",
description=f"```{stderr}```",
color=discord.Color.red()
)
await message.channel.send(embed=embed)
# Commande pour télécharger une vidéo dans un format spécifique
elif message.content.startswith('!download'):
args = message.content.split(" ")
url = args[1]
format_code = args[2]
output_file = args[3] if len(args) > 3 else "video_output.mp4"
embed = discord.Embed(
title="Téléchargement en cours",
description=f"Téléchargement de la vidéo depuis {url}...",
color=discord.Color.green()
)
await message.channel.send(embed=embed)
command = f'yt-dlp -f {format_code} -o "{output_file}" "{url}"'
stdout, stderr = await run_command(command)
if stdout or stderr:
embed = discord.Embed(
title="Téléchargement terminé",
description=f"Vidéo téléchargée sous le nom **{output_file}**",
color=discord.Color.green()
)
await message.channel.send(embed=embed)
if stderr:
embed = discord.Embed(
title="Erreur",
description=f"```{stderr}```",
color=discord.Color.red()
)
await message.channel.send(embed=embed)
# Commande pour scinder la vidéo en segments
elif message.content.startswith('!split'):
args = message.content.split(" ")
input_file = args[1]
segment_time = args[2] if len(args) > 2 else "00:03:00" # Durée par défaut de 3 minutes
output_pattern = args[3] if len(args) > 3 else "output_segment%03d.mp4"
command = f'ffmpeg -i {input_file} -c copy -map 0 -segment_time {segment_time} -reset_timestamps 1 -f segment {output_pattern}'
embed = discord.Embed(
title="Scission en cours",
description=f"Scission de la vidéo **{input_file}** en segments de {segment_time}...",
color=discord.Color.orange()
)
await message.channel.send(embed=embed)
stdout, stderr = await run_command(command)
if stdout or stderr:
embed = discord.Embed(
title="Scission terminée",
description=f"Vidéo scindée en segments sous le format **{output_pattern}**",
color=discord.Color.green()
)
await message.channel.send(embed=embed)
if stderr:
embed = discord.Embed(
title="Erreur",
description=f"```{stderr}```",
color=discord.Color.red()
)
await message.channel.send(embed=embed)
client.run(TOKEN)