from django.db import models from django.core.validators import validate_unicode_slug, MaxLengthValidator, MaxValueValidator, URLValidator # Create your models here. class Network(models.Model): name = models.CharField( max_length=40, unique=True, validators=[MaxLengthValidator(40)], ) slug = models.SlugField( db_index=True, unique=True, validators=[validate_unicode_slug], ) nickname = models.CharField( max_length=31, default='RotBot', validators=[MaxLengthValidator(31)], ) username = models.CharField( max_length=31, default='pyRot', validators=[MaxLengthValidator(31)], ) password = models.CharField( null=True, blank=True, max_length=31, validators=[MaxLengthValidator(31)], ) mail = models.EmailField() home_channel = models.CharField( max_length=64, default='#RotBot', validators=[MaxLengthValidator(64)], ) command_character = models.CharField( max_length=1, default='!', validators=[MaxLengthValidator(1)], ) help_character = models.CharField( max_length=1, default='@', validators=[MaxLengthValidator(1)], ) enabled = models.BooleanField( default=True, ) SERVICE_CHOICES = [ ('m', 'Modern network services, like Rizon.'), ('x', 'X bot, like UnderNet.'), ('n', 'None, bare server.'), ] # network_services = models.CharField( # max_length=1, # default='m', # choices=SERVICE_CHOICES, # ) # mute = models.BooleanField( # default=False, # ) class Meta: ordering = ['name'] def get_absolute_url(self): from django.urls import reverse return reverse('rotbot.views.network', args=[str(self.id)]) # Try this in the template: {{ object.name }} def __str__(self): return self.name class Host(models.Model): network = models.ForeignKey( 'Network', on_delete=models.CASCADE, related_name="host", related_query_name="hosts", ) address = models.CharField( max_length=200, unique=True, validators=[MaxLengthValidator(200)], ) port = models.PositiveSmallIntegerField( default = 6697, validators=[MaxValueValidator(65535)], ) ssl = models.BooleanField( default=True, ) connection_attempts = models.PositiveIntegerField( default=0, ) connection_succeeds = models.PositiveIntegerField( default=0, ) class Meta: order_with_respect_to = 'network' unique_together = ['address', 'port'] @property def connect_string(self): return '%s:%s' % (self.address, self.port) def __str__(self): return '%s:%s' % (self.address, self.port) class Channel(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, related_name="channel", related_query_name="channels", ) name = models.CharField( max_length=64, ) autojoin = models.BooleanField( default=False, null=True, ) key = models.CharField( max_length=32, null=True, ) def __str__(self): return '%s/$s' % (self.network, self.name) class User(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, ) name = models.CharField( max_length=31 ) aliasses = models.ManyToManyField('self') class Join(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, ) channel = models.ForeignKey( 'Channel', on_delete=models.PROTECT, ) user = models.ForeignKey( 'User', on_delete=models.PROTECT, ) amount = models.PositiveIntegerField( default=0, ) class Message(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, ) channel = models.ForeignKey( 'Channel', on_delete=models.PROTECT, ) user = models.ForeignKey( 'User', on_delete=models.PROTECT, ) amount = models.PositiveIntegerField( default=0, ) class Action(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, ) channel = models.ForeignKey( 'Channel', on_delete=models.PROTECT, ) user = models.ForeignKey( 'User', on_delete=models.PROTECT, ) amount = models.PositiveIntegerField( default=0, ) class Notice(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, ) channel = models.ForeignKey( 'Channel', on_delete=models.PROTECT, ) user = models.ForeignKey( 'User', on_delete=models.PROTECT, ) amount = models.PositiveIntegerField( default=0, ) class Kick(models.Model): network = models.ForeignKey( 'Network', on_delete=models.PROTECT, ) channel = models.ForeignKey( 'Channel', on_delete=models.PROTECT, ) kicker = models.ForeignKey( 'User', on_delete=models.PROTECT, related_name='kicker', ) kicked = models.ForeignKey( 'User', on_delete=models.PROTECT, related_name='kicked', ) amount = models.PositiveIntegerField( default=0, )