"""The blacklist can be managed within Discord using the ``/admin`` commands.However, if you want to manage the blacklist in your own code, you can use these functions... warning:: These methods can only be used after the blacklist has been activated with :meth:`.add_blacklist`."""from__future__importannotationsfrom.internalimportEzConfigfrom.sqlimportDBHandlerclass_BanDB(DBHandler):def__init__(self):self.db_name=EzConfig.blacklist.db_namesuper().__init__(EzConfig.blacklist.db_path)asyncdefsetup(self):awaitself.exec(f"""CREATE TABLE IF NOT EXISTS {self.db_name} ( user_id INTEGER PRIMARY KEY, reason TEXT, dt TIMESTAMP DEFAULT CURRENT_TIMESTAMP )""")asyncdefadd_ban(self,user_id:int,reason:str|None):awaitself.exec(f"INSERT INTO {self.db_name} (user_id, reason) VALUES (?, ?)",(user_id,reason))asyncdefremove_ban(self,user_id:int):result=awaitself.exec(f"DELETE FROM {self.db_name} WHERE user_id = ?",(user_id,))returnresult.rowcountasyncdefget_bans(self):returnawaitself.all(f"SELECT user_id FROM {self.db_name}")asyncdefget_full_bans(self):returnawaitself.all(f"SELECT user_id, reason, dt FROM {self.db_name} ORDER BY dt DESC",detect_types=1,)def_blacklist_ready()->bool:ifnotEzConfig.blacklist:returnFalsereturnTrue
[docs]asyncdefget_bans()->list[int]:"""Get all banned user IDs."""ifnot_blacklist_ready():return[]returnawait_BanDB().get_bans()
[docs]asyncdefget_full_bans()->list[tuple[int,str|None,str]]:"""Get all information about banned users. Returns ------- A list of tuples containing the user ID, ban reason, and date of the ban. """ifnot_blacklist_ready():return[]returnawait_BanDB().get_full_bans()
[docs]asyncdefadd_ban(user_id:int,reason:str|None=None)->bool:"""Ban a user. Parameters ---------- user_id: The user ID to ban reason: The reason for the ban Returns ------- bool: True if the user was banned successfully, False otherwise """ifnot_blacklist_ready():returnFalseawait_BanDB().add_ban(user_id,reason)returnTrue
[docs]asyncdefremove_ban(user_id:int)->bool:"""Unban a user. Parameters ---------- user_id: The user ID to unban Returns ------- bool: True if the user was unbanned successfully, False otherwise """ifnot_blacklist_ready():returnFalseresult=await_BanDB().remove_ban(user_id)returnbool(result)