def manage_points(uid: int, points: int): check_user(uid) base = execute( 'SELECT points FROM users WHERE user_id = %s;', [uid] )[0][0] or 0 points += base execute( 'UPDATE users SET points = %s WHERE user_id = %s;', [points, uid] )
def update_warn(uid: int, reason=None): today = now() return execute( 'UPDATE warns' ' SET warn_date = %s, warn_time = %s, warn_reason = %s' ' WHERE user_id = %s;', [today.strftime('%Y-%m-%d'), today.strftime('%H:%M:%S'), reason, uid])
def get_level(user_id: int): points = execute( 'SELECT points FROM users WHERE user_id = %s', [user_id] ) if points: return points[0] else: return 0
def purge_settings(guild_id: int) -> Dict: q = execute( '''SELECT check_channel_id, active_role_id, inactive_role_id, purge_started_date FROM purges WHERE guild_id = %s;''', [guild_id])[0] return dict(check_channel_id=q[0], active_role_id=q[1], inactive_role_id=q[2], purge_started_date=q[3])
def add_warn(uid: int, reason=None, level=None): today = now() warn_level = get_warn(uid) if level is None: level = warn_level[0][1] if warn_level else 1 check_user(uid) return execute( 'INSERT INTO warns' ' (user_id, warn_level, warn_date, warn_time, warn_reason)' ' VALUES (%s::bigint, %s, %s, %s, %s);', [ uid, level, today.strftime('%Y-%m-%d'), today.strftime('%H:%M:%S'), reason ])
def points_to_level(points: int) -> Dict: level = execute( 'SELECT level_id, min_points, max_points, role_id ' 'FROM levels ' 'WHERE (( ' ' ( %s >= min_points ) ' ' AND ' ' ( %s <= max_points ) ' '));', [points, points] ) return { 'level_id': level[0][0], 'min_points': level[0][1], 'max_points': level[0][2], 'role_id': level[0][3] } if level else {}
def get_warns() -> Dict: records = execute( 'SELECT warn_id, user_id, warn_level, warn_date, warn_time, warn_reason FROM warns;' ) result = {} if records: for r in records: result[r[0]] = { 'warn_id': r[0], 'user_id': r[1], 'warn_level': r[2], 'warn_date': r[3], 'warn_time': r[4], 'warn_reason': r[5] } else: result = {{}} return result
def get_all_points(limit=10) -> List: points = execute( 'SELECT user_id, points FROM users LIMIT %s;', [limit] ) return [[item[0], item[1]] for item in points] if points else []
def get_points(uid: int) -> int: points = execute( 'SELECT points FROM users WHERE user_id = %s', [uid] ) return points[0][0] if points else 0
def purge_enabled(guild_id: int) -> bool: q = execute('SELECT purge_enabled FROM purges WHERE guild_id = %s;', [guild_id]) return q[0][0] if q else False
def purge_disable(guild_id: int): return execute( 'UPDATE purges SET purge_enabled = false WHERE guild_id = %s;', [guild_id])
def add_user(uid: int): return execute('INSERT INTO users VALUES (%s::bigint);', [uid])
def get_warn(uid: int) -> Tuple[Tuple]: return execute('SELECT * FROM warns WHERE user_id = %s;', [uid])
def del_warns(uid: int): return execute('DELETE FROM warns WHERE user_id = %s;', [uid])
def del_user(uid: int): return execute('DELETE FROM users WHERE user_id = %s;', [uid])
def purge_enable(guild_id: int): today = now() return execute( 'UPDATE purges SET purge_enabled = true, purge_started_date = %s WHERE guild_id = %s;', [today.strftime('%Y-%m-%d'), guild_id])
def check_user(uid: int): if not execute('SELECT * FROM users WHERE user_id = %s;', [uid]): add_user(uid)