2024-04-28 17:18:06 +02:00
|
|
|
from threading import Lock
|
|
|
|
from utils import mutex, datawrite
|
|
|
|
|
|
|
|
import heapq
|
|
|
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
FILE="removequeue.json"
|
|
|
|
|
|
|
|
lock = Lock()
|
|
|
|
filelock = Lock()
|
|
|
|
|
|
|
|
# use a min-heap to get the next removal time
|
|
|
|
class RemoveQueue:
|
|
|
|
def __init__(self):
|
|
|
|
self.queue = []
|
|
|
|
|
|
|
|
@mutex(lock=lock)
|
|
|
|
@datawrite
|
|
|
|
def add(self, del_time: int, user: int, guild: int, role: int):
|
2024-05-12 19:27:16 +02:00
|
|
|
heapq.heappush(self.queue, [del_time, user, guild, role]) # need to use list instead of tuple because json parses to list
|
2024-04-28 17:18:06 +02:00
|
|
|
|
|
|
|
@mutex(lock=lock)
|
|
|
|
def get_min_time(self):
|
|
|
|
if self.queue:
|
|
|
|
return self.queue[0][0]
|
|
|
|
return -1
|
|
|
|
|
|
|
|
@mutex(lock=lock)
|
|
|
|
@datawrite
|
|
|
|
def pop(self):
|
|
|
|
if self.queue:
|
|
|
|
return heapq.heappop(self.queue)
|
|
|
|
return None
|
|
|
|
|
|
|
|
@mutex(lock=filelock)
|
|
|
|
def export(self):
|
|
|
|
with open(FILE, 'w') as f:
|
|
|
|
json.dump(self.queue, f)
|
|
|
|
|
|
|
|
@mutex(lock=filelock)
|
|
|
|
def load(self):
|
|
|
|
if not os.path.exists(FILE):
|
|
|
|
return
|
|
|
|
|
|
|
|
with open(FILE, 'r') as f:
|
|
|
|
self.queue = json.load(f)
|
|
|
|
|
|
|
|
heapq.heapify(self.queue)
|