feat: added blacklisting to musicdownloader
This commit is contained in:
parent
5eb7b487d6
commit
e4d0b38848
1 changed files with 92 additions and 0 deletions
|
@ -2,6 +2,7 @@ import asyncio
|
||||||
import re
|
import re
|
||||||
import discord
|
import discord
|
||||||
import os
|
import os
|
||||||
|
import sqlite3
|
||||||
from yt_dlp import YoutubeDL
|
from yt_dlp import YoutubeDL
|
||||||
from redbot.core import commands, checks, Config, data_manager
|
from redbot.core import commands, checks, Config, data_manager
|
||||||
|
|
||||||
|
@ -13,6 +14,39 @@ class MusicDownloader(commands.Cog):
|
||||||
save_directory = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader"
|
save_directory = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
class UserBlacklisted(Exception):
|
||||||
|
def __init__(self, message="The user is blacklisted from using this command."):
|
||||||
|
super().__init__(message)
|
||||||
|
|
||||||
|
def create_table(self):
|
||||||
|
data_path = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader{os.sep}Data"
|
||||||
|
if not os.path.isdir(data_path):
|
||||||
|
os.makedirs(data_path)
|
||||||
|
db_path = os.path.join(data_path, "database.db")
|
||||||
|
if not os.path.isfile(db_path):
|
||||||
|
con = sqlite3.connect(data_path)
|
||||||
|
cur = con.cursor()
|
||||||
|
cur.execute('''
|
||||||
|
CREATE TABLE IF NOT EXISTS blacklist_log (
|
||||||
|
user_id INTEGER PRIMARY KEY,
|
||||||
|
reason STRING DEFAULT NULL
|
||||||
|
);
|
||||||
|
''')
|
||||||
|
con.commit()
|
||||||
|
con.close()
|
||||||
|
|
||||||
|
def blacklist_checker(self, user_id):
|
||||||
|
data_path = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader{os.sep}Data"
|
||||||
|
db_path = os.path.join(data_path, "database.db")
|
||||||
|
con = sqlite3.connect(db_path)
|
||||||
|
cur = con.cursor()
|
||||||
|
cur.execute(f"SELECT user_id, reason FROM blacklist_log WHERE user_id = ?;", (user_id,))
|
||||||
|
result = cur.fetchone()
|
||||||
|
con.close()
|
||||||
|
if result:
|
||||||
|
user_id, reason = result
|
||||||
|
raise self.UserBlacklisted(reason)
|
||||||
|
|
||||||
@commands.command()
|
@commands.command()
|
||||||
@checks.is_owner()
|
@checks.is_owner()
|
||||||
async def change_data_path(self, ctx: commands.Context, *, data_path: str = None):
|
async def change_data_path(self, ctx: commands.Context, *, data_path: str = None):
|
||||||
|
@ -43,6 +77,11 @@ class MusicDownloader(commands.Cog):
|
||||||
- The `delete` argument will automatically delete the audio file after uploading it to Discord. If set to False, it will only save the file if you are a bot owner.
|
- The `delete` argument will automatically delete the audio file after uploading it to Discord. If set to False, it will only save the file if you are a bot owner.
|
||||||
|
|
||||||
- The `subfolder` argument only does anything if `delete` is set to False, but it allows you to save to a subfolder in the data path you've set previously without having to change said data path manually."""
|
- The `subfolder` argument only does anything if `delete` is set to False, but it allows you to save to a subfolder in the data path you've set previously without having to change said data path manually."""
|
||||||
|
try:
|
||||||
|
self.blacklist_checker(ctx.author.id)
|
||||||
|
except self.UserBlacklisted as e:
|
||||||
|
await ctx.send(f"You are blacklisted from running this command!\nReason: `{e}`")
|
||||||
|
return
|
||||||
def youtube_download(self, url: str, path: str, message: discord.Message):
|
def youtube_download(self, url: str, path: str, message: discord.Message):
|
||||||
"""This function does the actual downloading of the YouTube Video."""
|
"""This function does the actual downloading of the YouTube Video."""
|
||||||
class Logger:
|
class Logger:
|
||||||
|
@ -124,3 +163,56 @@ class MusicDownloader(commands.Cog):
|
||||||
if ytdlp_output[1] is False:
|
if ytdlp_output[1] is False:
|
||||||
os.remove(full_filename)
|
os.remove(full_filename)
|
||||||
await complete_message.edit(content="YouTube Downloader completed!\nFile has been deleted from Galaxy.\nDownloaded file:")
|
await complete_message.edit(content="YouTube Downloader completed!\nFile has been deleted from Galaxy.\nDownloaded file:")
|
||||||
|
|
||||||
|
@commands.group(name="dl-blacklist", invoke_without_command=True)
|
||||||
|
async def blacklist(self, ctx, user: discord.User = None):
|
||||||
|
"""Group command for managing the blacklist."""
|
||||||
|
data_path = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader{os.sep}Data"
|
||||||
|
db_path = os.path.join(data_path, "database.db")
|
||||||
|
if user is None:
|
||||||
|
await ctx.send("Please provide a user to check in the blacklist.")
|
||||||
|
return
|
||||||
|
con = sqlite3.connect(db_path)
|
||||||
|
cur = con.cursor()
|
||||||
|
cur.execute("SELECT user_id, reason FROM blacklist_log WHERE user_id = ?;", (user.id,))
|
||||||
|
result = cur.fetchone()
|
||||||
|
if result:
|
||||||
|
user_id, reason = result
|
||||||
|
await ctx.send(f"{user.mention} is in the blacklist for the following reason: {reason}")
|
||||||
|
else:
|
||||||
|
await ctx.send(f"{user.mention} is not in the blacklist.")
|
||||||
|
con.close()
|
||||||
|
|
||||||
|
@blacklist.command(name='add')
|
||||||
|
async def blacklist_add(self, ctx, user: discord.User, *, reason: str = None):
|
||||||
|
data_path = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader{os.sep}Data"
|
||||||
|
db_path = os.path.join(data_path, "database.db")
|
||||||
|
con = sqlite3.connect(db_path)
|
||||||
|
cur = con.cursor()
|
||||||
|
cur.execute("SELECT user_id FROM blacklist_log WHERE user_id = ?;", (user.id,))
|
||||||
|
result = cur.fetchone()
|
||||||
|
if result:
|
||||||
|
await ctx.send("User is already in the blacklist.")
|
||||||
|
con.close()
|
||||||
|
return
|
||||||
|
cur.execute("INSERT INTO blacklist_log (user_id, reason) VALUES (?, ?);", (user.id, reason))
|
||||||
|
con.commit()
|
||||||
|
con.close()
|
||||||
|
await ctx.send(f"{user.mention} has been added to the blacklist with the reason: {reason or 'No reason provided.'}")
|
||||||
|
|
||||||
|
@blacklist_add.command(name='remove')
|
||||||
|
async def blacklist_remove(self, ctx, user: discord.User):
|
||||||
|
data_path = str(data_manager.cog_data_path()) + f"{os.sep}MusicDownloader{os.sep}Data"
|
||||||
|
db_path = os.path.join(data_path, "database.db")
|
||||||
|
con = sqlite3.connect(db_path)
|
||||||
|
cur = con.cursor()
|
||||||
|
cur.execute("SELECT user_id FROM blacklist_log WHERE user_id = ?;", (user.id,))
|
||||||
|
result = cur.fetchone()
|
||||||
|
if not result:
|
||||||
|
await ctx.send("User is not in the blacklist.")
|
||||||
|
con.close()
|
||||||
|
return
|
||||||
|
cur.execute("DELETE FROM blacklist_log WHERE user_id = ?;", (user.id,))
|
||||||
|
con.commit()
|
||||||
|
con.close()
|
||||||
|
await ctx.send(f"{user.mention} has been removed from the blacklist.")
|
||||||
|
|
Loading…
Reference in a new issue