1
0

models.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. from django.db import models
  2. from django.core.validators import validate_unicode_slug, MaxLengthValidator, MaxValueValidator, URLValidator
  3. # Create your models here.
  4. class Network(models.Model):
  5. name = models.CharField(
  6. max_length=40,
  7. unique=True,
  8. validators=[MaxLengthValidator(40)],
  9. )
  10. slug = models.SlugField(
  11. db_index=True,
  12. unique=True,
  13. validators=[validate_unicode_slug],
  14. )
  15. nickname = models.CharField(
  16. max_length=31,
  17. default='RotBot',
  18. validators=[MaxLengthValidator(31)],
  19. )
  20. username = models.CharField(
  21. max_length=31,
  22. default='pyRot',
  23. validators=[MaxLengthValidator(31)],
  24. )
  25. password = models.CharField(
  26. null=True,
  27. blank=True,
  28. max_length=31,
  29. validators=[MaxLengthValidator(31)],
  30. )
  31. mail = models.EmailField()
  32. home_channel = models.CharField(
  33. max_length=64,
  34. default='#RotBot',
  35. validators=[MaxLengthValidator(64)],
  36. )
  37. command_character = models.CharField(
  38. max_length=1,
  39. default='!',
  40. validators=[MaxLengthValidator(1)],
  41. )
  42. help_character = models.CharField(
  43. max_length=1,
  44. default='@',
  45. validators=[MaxLengthValidator(1)],
  46. )
  47. enabled = models.BooleanField(
  48. default=True,
  49. )
  50. SERVICE_CHOICES = [
  51. ('m', 'Modern network services, like Rizon.'),
  52. ('x', 'X bot, like UnderNet.'),
  53. ('n', 'None, bare server.'),
  54. ]
  55. # network_services = models.CharField(
  56. # max_length=1,
  57. # default='m',
  58. # choices=SERVICE_CHOICES,
  59. # )
  60. # mute = models.BooleanField(
  61. # default=False,
  62. # )
  63. class Meta:
  64. ordering = ['name']
  65. def get_absolute_url(self):
  66. from django.urls import reverse
  67. return reverse('rotbot.views.network', args=[str(self.id)])
  68. # Try this in the template: <a href="{{ object.get_absolute_url }}">{{ object.name }}</a>
  69. def __str__(self):
  70. return self.name
  71. class Host(models.Model):
  72. network = models.ForeignKey(
  73. 'Network',
  74. on_delete=models.CASCADE,
  75. related_name="host",
  76. related_query_name="hosts",
  77. )
  78. address = models.CharField(
  79. max_length=200,
  80. unique=True,
  81. validators=[MaxLengthValidator(200)],
  82. )
  83. port = models.PositiveSmallIntegerField(
  84. default = 6697,
  85. validators=[MaxValueValidator(65535)],
  86. )
  87. ssl = models.BooleanField(
  88. default=True,
  89. )
  90. connection_attempts = models.PositiveIntegerField(
  91. default=0,
  92. )
  93. connection_succeeds = models.PositiveIntegerField(
  94. default=0,
  95. )
  96. class Meta:
  97. order_with_respect_to = 'network'
  98. unique_together = ['address', 'port']
  99. @property
  100. def connect_string(self):
  101. return '%s:%s' % (self.address, self.port)
  102. def __str__(self):
  103. return '%s:%s' % (self.address, self.port)
  104. class Channel(models.Model):
  105. network = models.ForeignKey(
  106. 'Network',
  107. on_delete=models.PROTECT,
  108. related_name="channel",
  109. related_query_name="channels",
  110. )
  111. name = models.CharField(
  112. max_length=64,
  113. )
  114. autojoin = models.BooleanField(
  115. default=False,
  116. null=True,
  117. )
  118. key = models.CharField(
  119. max_length=32,
  120. null=True,
  121. )
  122. def __str__(self):
  123. return '%s/$s' % (self.network, self.name)
  124. class User(models.Model):
  125. network = models.ForeignKey(
  126. 'Network',
  127. on_delete=models.PROTECT,
  128. )
  129. name = models.CharField(
  130. max_length=31
  131. )
  132. aliasses = models.ManyToManyField('self')
  133. class Join(models.Model):
  134. network = models.ForeignKey(
  135. 'Network',
  136. on_delete=models.PROTECT,
  137. )
  138. channel = models.ForeignKey(
  139. 'Channel',
  140. on_delete=models.PROTECT,
  141. )
  142. user = models.ForeignKey(
  143. 'User',
  144. on_delete=models.PROTECT,
  145. )
  146. amount = models.PositiveIntegerField(
  147. default=0,
  148. )
  149. class Message(models.Model):
  150. network = models.ForeignKey(
  151. 'Network',
  152. on_delete=models.PROTECT,
  153. )
  154. channel = models.ForeignKey(
  155. 'Channel',
  156. on_delete=models.PROTECT,
  157. )
  158. user = models.ForeignKey(
  159. 'User',
  160. on_delete=models.PROTECT,
  161. )
  162. amount = models.PositiveIntegerField(
  163. default=0,
  164. )
  165. class Action(models.Model):
  166. network = models.ForeignKey(
  167. 'Network',
  168. on_delete=models.PROTECT,
  169. )
  170. channel = models.ForeignKey(
  171. 'Channel',
  172. on_delete=models.PROTECT,
  173. )
  174. user = models.ForeignKey(
  175. 'User',
  176. on_delete=models.PROTECT,
  177. )
  178. amount = models.PositiveIntegerField(
  179. default=0,
  180. )
  181. class Notice(models.Model):
  182. network = models.ForeignKey(
  183. 'Network',
  184. on_delete=models.PROTECT,
  185. )
  186. channel = models.ForeignKey(
  187. 'Channel',
  188. on_delete=models.PROTECT,
  189. )
  190. user = models.ForeignKey(
  191. 'User',
  192. on_delete=models.PROTECT,
  193. )
  194. amount = models.PositiveIntegerField(
  195. default=0,
  196. )
  197. class Kick(models.Model):
  198. network = models.ForeignKey(
  199. 'Network',
  200. on_delete=models.PROTECT,
  201. )
  202. channel = models.ForeignKey(
  203. 'Channel',
  204. on_delete=models.PROTECT,
  205. )
  206. kicker = models.ForeignKey(
  207. 'User',
  208. on_delete=models.PROTECT,
  209. related_name='kicker',
  210. )
  211. kicked = models.ForeignKey(
  212. 'User',
  213. on_delete=models.PROTECT,
  214. related_name='kicked',
  215. )
  216. amount = models.PositiveIntegerField(
  217. default=0,
  218. )