django_coreprotect/models.py

449 lines
13 KiB
Python

from datetime import datetime
from django.contrib.auth.models import User
from django.db import models
from django.shortcuts import reverse
from django_coreprotect.utils import safe_int
class CoreProtectUser(User):
class Meta:
proxy = True
permissions = (
('gui', 'Can use CoreProtect GUI'),
('gui_extra', 'Can search Chat/Commands'),
('activity', 'Can use CoreProtect Activity Monitor'),
)
class CoArtMap(models.Model):
id = models.IntegerField(primary_key=True)
art = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_art_map'
verbose_name = 'Art Map'
verbose_name_plural = 'Art Maps'
def __str__(self):
return self.art
class CoBlock(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.IntegerField(blank=True, null=True)
wid = models.IntegerField(blank=True, null=True)
x = models.IntegerField(blank=True, null=True)
y = models.IntegerField(blank=True, null=True)
z = models.IntegerField(blank=True, null=True)
type = models.IntegerField(blank=True, null=True)
data = models.IntegerField(blank=True, null=True)
meta = models.BinaryField(blank=True, null=True)
blockdata = models.BinaryField(blank=True, null=True)
action = models.IntegerField(blank=True, null=True)
rolled_back = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_block'
verbose_name = 'Block'
verbose_name_plural = 'Blocks'
def __str__(self):
return self.type
class CoBlockdataMap(models.Model):
id = models.IntegerField(primary_key=True)
data = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_blockdata_map'
verbose_name = 'BlockData Map'
verbose_name_plural = 'BlockData Maps'
def __str__(self):
return self.data
class CoChat(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.IntegerField(blank=True, null=True)
message = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_chat'
verbose_name = 'Chat Message'
verbose_name_plural = 'Chat Messages'
def __str__(self):
return self.message
class CoCommand(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.IntegerField(blank=True, null=True)
message = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_command'
verbose_name = 'Command'
verbose_name_plural = 'Commands'
def __str__(self):
return self.message
class CoContainer(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.IntegerField(blank=True, null=True)
wid = models.IntegerField(blank=True, null=True)
x = models.IntegerField(blank=True, null=True)
y = models.IntegerField(blank=True, null=True)
z = models.IntegerField(blank=True, null=True)
type = models.IntegerField(blank=True, null=True)
data = models.IntegerField(blank=True, null=True)
amount = models.IntegerField(blank=True, null=True)
metadata = models.BinaryField(blank=True, null=True)
action = models.IntegerField(blank=True, null=True)
rolled_back = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_container'
verbose_name = 'Container Transaction'
verbose_name_plural = 'Container Transactions'
def __str__(self):
return self.user
class CoDatabaseLock(models.Model):
status = models.IntegerField(blank=True, null=True)
time = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_database_lock'
verbose_name = 'Database Lock'
verbose_name_plural = 'Database Locks'
def __str__(self):
return self.status
class CoEntity(models.Model):
time = models.IntegerField(blank=True, null=True)
data = models.BinaryField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_entity'
verbose_name = 'Entity'
verbose_name_plural = 'Entities'
def __str__(self):
return self.time
class CoEntityMap(models.Model):
id = models.IntegerField(primary_key=True)
entity = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_entity_map'
verbose_name = 'Entity Mapping'
verbose_name_plural = 'Entity Mappings'
def __str__(self):
return self.entity
class CoMaterialMap(models.Model):
id = models.IntegerField(primary_key=True)
material = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_material_map'
verbose_name = 'Material Mapping'
verbose_name_plural = 'Material Mappings'
def __str__(self):
return self.material
class CoSession(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.IntegerField(blank=True, null=True)
wid = models.IntegerField(blank=True, null=True)
x = models.IntegerField(blank=True, null=True)
y = models.IntegerField(blank=True, null=True)
z = models.IntegerField(blank=True, null=True)
action = models.IntegerField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_session'
verbose_name = 'Session'
verbose_name_plural = 'Sessions'
def __str__(self):
return self.user
class CoSign(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.IntegerField(blank=True, null=True)
wid = models.IntegerField(blank=True, null=True)
x = models.IntegerField(blank=True, null=True)
y = models.IntegerField(blank=True, null=True)
z = models.IntegerField(blank=True, null=True)
color = models.IntegerField(blank=True, null=True)
line_1 = models.TextField(blank=True, null=True)
line_2 = models.TextField(blank=True, null=True)
line_3 = models.TextField(blank=True, null=True)
line_4 = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_sign'
verbose_name = 'Sign'
verbose_name_plural = 'Signs'
def __str__(self):
return "{} | {} | {} | {}".format(self.line_1, self.line_2, self.line_3, self.line_4)
class CoSkull(models.Model):
time = models.IntegerField(blank=True, null=True)
owner = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_skull'
verbose_name = 'Skull'
verbose_name_plural = 'Skulls'
def __str__(self):
return self.owner
class CoUser(models.Model):
time = models.IntegerField(blank=True, null=True)
user = models.TextField(blank=True, null=True)
uuid = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_user'
verbose_name = 'User'
verbose_name_plural = 'Users'
def __str__(self):
return self.user
class CoUsernameLog(models.Model):
time = models.IntegerField(blank=True, null=True)
uuid = models.TextField(blank=True, null=True)
user = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_username_log'
verbose_name = 'Username'
verbose_name_plural = 'Usernames'
def __str__(self):
return self.user
class CoVersion(models.Model):
time = models.IntegerField(blank=True, null=True)
version = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_version'
verbose_name = 'Version'
verbose_name_plural = 'Versions'
def __str__(self):
return self.version
class CoWorld(models.Model):
id = models.IntegerField(primary_key=True)
world = models.TextField(blank=True, null=True)
class Meta:
managed = False
db_table = 'co_world'
verbose_name = 'World'
verbose_name_plural = 'Worlds'
def __str__(self):
return self.world
class Preset(models.Model):
name = models.CharField(max_length=50)
block_break = models.BooleanField(default=False)
block_place = models.BooleanField(default=False)
chat = models.BooleanField(default=False)
chest_use = models.BooleanField(default=False)
command = models.BooleanField(default=False)
interact = models.BooleanField(default=False)
login_logout = models.BooleanField(default=False)
sign_place = models.BooleanField(default=False)
worlds = models.CharField(max_length=20, default="", blank=True)
ignore_environment = models.BooleanField(default=False)
oldest_first = models.BooleanField(default=False)
players = models.CharField(max_length=50, blank=True)
x = models.CharField(max_length=10, default="", blank=True)
y = models.CharField(max_length=10, default="", blank=True)
z = models.CharField(max_length=10, default="", blank=True)
radius = models.CharField(max_length=10, default="", blank=True)
blocks = models.CharField(max_length=50, default="", blank=True)
date_from = models.CharField(max_length=50, default="", blank=True)
date_to = models.CharField(max_length=50, default="", blank=True)
enabled = models.BooleanField(default=True)
@property
def link(self):
url = reverse("coreprotect_gui") + "?"
params = []
if self.block_break:
params.append("block_break=on")
if self.block_place:
params.append("block_place=on")
if self.chat:
params.append("chat=on")
if self.chest_use:
params.append("chest_use=on")
if self.command:
params.append("command=on")
if self.interact:
params.append("interact=on")
if self.login_logout:
params.append("login_logout=on")
if self.sign_place:
params.append("sign_place=on")
if self.worlds:
for world in self.worlds.split(","):
params.append("world=" + world)
if self.ignore_environment:
params.append("ignore_environment=on")
if self.oldest_first:
params.append("oldest_first=on")
if self.players:
params.append("players=" + self.players)
if self.x:
params.append("x=" + self.x)
if self.y:
params.append("y=" + self.y)
if self.z:
params.append("z=" + self.z)
if self.radius:
params.append("radius=" + self.radius)
if self.blocks:
params.append("blocks=" + self.blocks)
if self.date_from:
params.append("date_from=" + self.date_from)
if self.date_to:
params.append("date_to=" + self.date_to)
return url + "&".join(params)
def __str__(self):
return self.name
class GUIResult(models.Model):
type = models.TextField()
unix = models.TextField()
player = models.TextField()
action = models.TextField()
data = models.TextField()
x = models.TextField()
y = models.TextField()
z = models.TextField()
world = models.TextField()
@property
def display_time(self):
dt = datetime.fromtimestamp(float(self.unix))
return dt.strftime("%b %d, %Y at %I:%M:%S %p")
@property
def display_action(self):
if self.type == "block":
return "Block Break" if str(self.action) == "0" else "Block Place" if str(self.action) == "1" else "Interact/Used"
if self.type == "chat":
return "Chat"
if self.type == "container":
return "Took from Container" if str(self.action) == "0" else "Placed in Container"
if self.type == "command":
return "Command"
if self.type == "session":
return "Logout" if str(self.action) == "0" else "Login"
if self.type == "sign":
return "Sign"
return self.action
@property
def display_data(self):
def material_name(namespace):
m = namespace.replace("minecraft:", "")
pp = m.split("_")
return " ".join([p.capitalize() for p in pp])
if self.type == "block":
return material_name(self.data)
if self.type == "container":
parts = self.data.split()
return "{} {}".format(parts[0], material_name(parts[1]))
return self.data
class Meta:
managed = False
verbose_name = "GUI Result"
verbose_name_plural = "GUI Results"
class SessionResult(models.Model):
unix = models.TextField()
player = models.TextField()
action = models.TextField()
class Meta:
managed = False
verbose_name = "Session Result"
verbose_name_plural = "Session Results"
class ActivityResult:
def __init__(self, player, time):
self.player = player
self.time = time
@property
def time_display(self):
time = safe_int(self.time)
seconds = time % 60
time //= 60
minutes = time % 60
time //= 60
hours = time % 24
time //= 24
days = time
return "{}d, {}h, {}m, {}s".format(days, hours, minutes, seconds)