Files
caminus/minecraft/models.py
2012-04-21 10:45:22 -04:00

107 lines
3.4 KiB
Python

from django.db import models
from django.contrib.auth.models import User, Group
from django.db.models.signals import post_save
from django.core.cache import cache
from django.core.exceptions import ObjectDoesNotExist
import socket
import datetime
class MinecraftProfile(models.Model):
user = models.OneToOneField(User)
mc_username = models.CharField(max_length=30, verbose_name="Minecraft.net Username", unique=True)
def isBanned(self):
if self.bans.filter(expiration__gt=datetime.datetime.today()):
return True
if self.bans.filter(expiration__isnull=True):
return True
return False
def serverPermissions(self):
perms = []
for group in self.user.groups.all():
for perm in group.minecraftgroup.permissionList.split("\n"):
perms.append(perm.strip())
return perms
def totalPlaytime(self):
total = datetime.datetime.now()-datetime.datetime.now()
for session in self.playersession_set.all():
if not session.end:
end = datetime.datetime.now()
else:
end = session.end
total = total + end-session.start
return total
def averagePlaytime(self):
return self.totalPlaytime()/len(self.playersession_set.all())
def __unicode__(self):
return self.mc_username
class Server(models.Model):
hostname = models.CharField(max_length=100)
port = models.IntegerField(default=25565)
query_port = models.IntegerField(default=25565)
ruleset = models.TextField(default='')
secret = models.CharField(max_length=100)
class Meta:
permissions = (
('login_all', 'Can login to all minecraft servers'),
)
def online_players(self):
activeSessions = PlayerSession.objects.all().filter(end=None)
players = []
for s in activeSessions:
players.append(s.player)
return players
def __unicode__(self):
return "%s:%d"%(self.hostname, self.port)
class MOTD(models.Model):
server = models.ForeignKey(Server)
text = models.TextField()
def __unicode__(self):
return self.text
class PlayerSession(models.Model):
server = models.ForeignKey(Server)
player = models.ForeignKey(MinecraftProfile)
ip = models.IPAddressField()
start = models.DateTimeField(auto_now_add=True, blank=False, null=False)
end = models.DateTimeField(blank=True, null=True)
def create_profile(sender, instance, created, **kwargs):
if created:
MinecraftProfile.objects.create(user=instance, mc_username=instance.username)
post_save.connect(create_profile, sender=User)
class MinecraftGroup(models.Model):
authGroup = models.OneToOneField(Group)
permissionList = models.TextField(blank=True)
def __unicode__(self):
return self.authGroup.__unicode__()
def create_group(sender, instance, created, **kwargs):
if created:
MinecraftGroup.objects.create(authGroup = instance)
post_save.connect(create_group, sender=Group)
class Ban(models.Model):
player = models.ForeignKey(MinecraftProfile, related_name='bans')
banner = models.ForeignKey(User)
start = models.DateTimeField(auto_now_add=True)
expiration = models.DateTimeField(blank=True)
reason = models.TextField()
def __unicode__(self):
return "%s: %s"%(self.player, self.reason)