Updates to stuff lol
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
from django.urls import path
|
||||
|
||||
from .views import ChannelsAPI, ChannelDetail
|
||||
|
||||
app_name = "channels_api"
|
||||
urlpatterns = [
|
||||
path("", view=ChannelsAPI.as_view(), name="list"),
|
||||
path("<str:id>/", view=ChannelDetail.as_view(), name='detail')
|
||||
]
|
||||
@@ -1,5 +1,7 @@
|
||||
from django.apps import AppConfig
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
||||
class ChannelsConfig(AppConfig):
|
||||
name = 'channels'
|
||||
name = 'geeksbot_v2.channels'
|
||||
verbose_name = _("Channels")
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('guilds', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Channel',
|
||||
fields=[
|
||||
('id', models.CharField(max_length=30, primary_key=True, serialize=False)),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,28 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-21 02:50
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('channels', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='channel',
|
||||
name='admin',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='channel',
|
||||
name='default',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='channel',
|
||||
name='new_patron',
|
||||
field=models.BooleanField(default=False),
|
||||
),
|
||||
]
|
||||
@@ -12,6 +12,28 @@ from .utils import create_success_response
|
||||
class Channel(models.Model):
|
||||
id = models.CharField(max_length=30, primary_key=True)
|
||||
guild = models.ForeignKey(Guild, on_delete=models.CASCADE)
|
||||
default = models.BooleanField(default=False)
|
||||
new_patron = models.BooleanField(default=False)
|
||||
admin = models.BooleanField(default=False)
|
||||
|
||||
def update_channel(self, data):
|
||||
if data.get('default'):
|
||||
try:
|
||||
existing_default = self.get_guild_channels(self.guild).get(default=True)
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
else:
|
||||
existing_default.default = False
|
||||
existing_default.save()
|
||||
finally:
|
||||
self.default = data.get('default')
|
||||
if data.get('new_patron'):
|
||||
self.new_patron = data.get('new_patron')
|
||||
if data.get('admin'):
|
||||
self.admin = data.get('admin')
|
||||
|
||||
self.save()
|
||||
return self
|
||||
|
||||
@classmethod
|
||||
def add_new_channel(cls, data):
|
||||
@@ -21,7 +43,7 @@ class Channel(models.Model):
|
||||
status=status.HTTP_409_CONFLICT)
|
||||
guild_id = data.get('guild')
|
||||
if not (id and guild_id):
|
||||
return create_error_response('Id and Guild are required',
|
||||
return create_error_response('ID and Guild are required',
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
guild = Guild.get_guild_by_id(guild_id)
|
||||
if not isinstance(guild, Guild):
|
||||
@@ -30,7 +52,10 @@ class Channel(models.Model):
|
||||
|
||||
channel = cls(
|
||||
id=id,
|
||||
guild=guild
|
||||
guild=guild,
|
||||
default=data.get('default', False),
|
||||
new_patron=data.get('new_patron', False),
|
||||
admin=data.get('admin', False)
|
||||
)
|
||||
channel.save()
|
||||
return create_success_response(channel, status.HTTP_201_CREATED, many=False)
|
||||
@@ -41,6 +66,11 @@ class Channel(models.Model):
|
||||
return cls.objects.get(id=id)
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def get_guild_channels(cls, guild):
|
||||
if isinstance(guild, Guild):
|
||||
return cls.objects.filter(guild=guild)
|
||||
|
||||
def __str__(self):
|
||||
return str(id)
|
||||
|
||||
@@ -1,3 +1,69 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework import status
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
|
||||
from geeksbot_v2.utils.api_utils import PaginatedAPIView
|
||||
from .models import Channel
|
||||
from .utils import create_error_response
|
||||
from .utils import create_success_response
|
||||
|
||||
# Create your views here.
|
||||
|
||||
# API Views
|
||||
|
||||
|
||||
class ChannelsAPI(PaginatedAPIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, format=None):
|
||||
guilds = Channel.objects.all()
|
||||
page = self.paginate_queryset(guilds)
|
||||
if page is not None:
|
||||
return create_success_response(page, status.HTTP_200_OK, many=True)
|
||||
|
||||
return create_success_response(guilds, status.HTTP_200_OK, many=True)
|
||||
|
||||
def post(self, request, format=None):
|
||||
data = dict(request.data)
|
||||
return Channel.add_new_channel(data)
|
||||
|
||||
|
||||
class ChannelDetail(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, id, format=None):
|
||||
try:
|
||||
guild = Channel.objects.get(id=id)
|
||||
except ObjectDoesNotExist:
|
||||
return create_error_response("Channel Does not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
else:
|
||||
return create_success_response(guild,
|
||||
status=status.HTTP_200_OK)
|
||||
|
||||
def put(self, request, id, format=None):
|
||||
channel = Channel.get_channel_by_id(id)
|
||||
|
||||
if channel:
|
||||
data = dict(request.data)
|
||||
channel = channel.update_channel(data)
|
||||
return create_success_response(channel,
|
||||
status=status.HTTP_202_ACCEPTED)
|
||||
else:
|
||||
return create_error_response('Channel Does Not Exist',
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def delete(self, request, id, format=None):
|
||||
guild = Channel.get_guild_by_id(id)
|
||||
|
||||
if guild:
|
||||
# data = dict(request.data)
|
||||
# TODO Add a check to verify user is allowed to delete...
|
||||
# Possibly in object permissions...
|
||||
guild.delete()
|
||||
return create_success_response(guild,
|
||||
status=status.HTTP_200_OK)
|
||||
else:
|
||||
return create_error_response('Channel Does Not Exist',
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
@@ -80,6 +80,7 @@ LOCAL_APPS = [
|
||||
"geeksbot_v2.dmessages.apps.MessagesConfig",
|
||||
"geeksbot_v2.patreon.apps.PatreonConfig",
|
||||
"geeksbot_v2.rcon.apps.RconConfig",
|
||||
"geeksbot_v2.channels.apps.ChannelsConfig",
|
||||
# Your stuff: custom apps go here
|
||||
]
|
||||
# https://docs.djangoproject.com/en/dev/ref/settings/#installed-apps
|
||||
@@ -285,3 +286,5 @@ REST_FRAMEWORK = {
|
||||
"DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination",
|
||||
"PAGE_SIZE": 100,
|
||||
}
|
||||
|
||||
SILENCED_SYSTEM_CHECKS = ["auth.W004"]
|
||||
|
||||
@@ -16,8 +16,10 @@ urlpatterns = [
|
||||
path("users/", include("geeksbot_v2.users.urls", namespace="users")),
|
||||
path("accounts/", include("allauth.urls")),
|
||||
# Your stuff: custom urls includes go here
|
||||
path("api/users", include("geeksbot_v2.users.api_urls", namespace="users_api")),
|
||||
path("api/guilds", include("geeksbot_v2.guilds.api_urls", namespace="guilds_api"))
|
||||
path("api/users/", include("geeksbot_v2.users.api_urls", namespace="users_api")),
|
||||
path("api/guilds/", include("geeksbot_v2.guilds.api_urls", namespace="guilds_api")),
|
||||
path("api/channels/", include("geeksbot_v2.channels.api_urls", namespace="channels_api")),
|
||||
path("api/messages/", include("geeksbot_v2.dmessages.api_urls", namespace="messages_api")),
|
||||
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
|
||||
|
||||
if settings.DEBUG:
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
from django.urls import path
|
||||
|
||||
from .views import MessageDetailAPI, MessagesAPI
|
||||
from .views import RequestDetailAPI, RequestsAPI
|
||||
from .views import CommentDetailAPI, CommentsAPI
|
||||
|
||||
app_name = "channels_api"
|
||||
urlpatterns = [
|
||||
path("", view=MessagesAPI.as_view(), name="message_list"),
|
||||
path("<str:id>/", view=MessageDetailAPI.as_view(), name='message_detail'),
|
||||
path("requests/", view=RequestsAPI.as_view(), name="requests_list"),
|
||||
path("requests/<str:id>/", view=RequestDetailAPI.as_view(), name='request_detail'),
|
||||
path("requests/<str:request_id>/comments/", view=CommentsAPI.as_view(), name="comments_list"),
|
||||
path("requests/<str:request_id>/comments/<str:comment_id>/", view=CommentDetailAPI.as_view(), name='comment_detail'),
|
||||
]
|
||||
@@ -1,9 +1,7 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-17 19:31
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.postgres.fields
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
@@ -11,29 +9,26 @@ class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('guilds', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Message',
|
||||
name='AdminComment',
|
||||
fields=[
|
||||
('id', models.CharField(max_length=30, primary_key=True, serialize=False)),
|
||||
('channel', models.CharField(max_length=30)),
|
||||
('created_at', models.DateTimeField()),
|
||||
('modified_at', models.DateTimeField(null=True)),
|
||||
('deleted_at', models.DateTimeField(null=True)),
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('content', models.CharField(max_length=1000)),
|
||||
('updated_at', models.DateTimeField(auto_now_add=True)),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminRequest',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('completed', models.BooleanField(default=False)),
|
||||
('requested_at', models.DateTimeField(auto_now_add=True)),
|
||||
('completed_at', models.DateTimeField(blank=True, default=None, null=True)),
|
||||
('completed_message', models.CharField(blank=True, default=None, max_length=1000, null=True)),
|
||||
('content', models.CharField(max_length=2000)),
|
||||
('previous_content', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=2000), size=None)),
|
||||
('tagged_users', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None)),
|
||||
('tagged_channels', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None)),
|
||||
('tagged_roles', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=30), size=None)),
|
||||
('tagged_everyone', models.BooleanField()),
|
||||
('embeds', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), size=None)),
|
||||
('previous_embeds', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), size=None), size=None)),
|
||||
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -45,20 +40,20 @@ class Migration(migrations.Migration):
|
||||
('format', models.PositiveSmallIntegerField()),
|
||||
('channel', models.CharField(max_length=30)),
|
||||
('message_number', models.PositiveSmallIntegerField()),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
('message', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dmessages.Message')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminRequest',
|
||||
name='Message',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('completed', models.BooleanField()),
|
||||
('requested_at', models.DateTimeField()),
|
||||
('completed_at', models.DateTimeField()),
|
||||
('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
('message', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dmessages.Message')),
|
||||
('id', models.CharField(max_length=30, primary_key=True, serialize=False)),
|
||||
('created_at', models.DateTimeField()),
|
||||
('modified_at', models.DateTimeField(blank=True, null=True)),
|
||||
('deleted_at', models.DateTimeField(blank=True, null=True)),
|
||||
('content', models.CharField(max_length=2000)),
|
||||
('previous_content', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=2000), default=list, size=None)),
|
||||
('tagged_everyone', models.BooleanField()),
|
||||
('embeds', django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), default=list, size=None)),
|
||||
('previous_embeds', django.contrib.postgres.fields.ArrayField(base_field=django.contrib.postgres.fields.ArrayField(base_field=models.TextField(), size=None), default=list, size=None)),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('guilds', '0001_initial'),
|
||||
('dmessages', '0001_initial'),
|
||||
('channels', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='message',
|
||||
name='author',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='message',
|
||||
name='channel',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='+', to='channels.Channel'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='message',
|
||||
name='guild',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='message',
|
||||
name='tagged_channels',
|
||||
field=models.ManyToManyField(related_name='_message_tagged_channels_+', to='channels.Channel'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='message',
|
||||
name='tagged_roles',
|
||||
field=models.ManyToManyField(to='guilds.Role'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='message',
|
||||
name='tagged_users',
|
||||
field=models.ManyToManyField(related_name='_message_tagged_users_+', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='guildinfo',
|
||||
name='guild',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='guildinfo',
|
||||
name='message',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='dmessages.Message'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='adminrequest',
|
||||
name='author',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='adminrequest',
|
||||
name='channel',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='channels.Channel'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='adminrequest',
|
||||
name='completed_by',
|
||||
field=models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='adminrequest',
|
||||
name='guild',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='adminrequest',
|
||||
name='message',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to='dmessages.Message'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='admincomment',
|
||||
name='author',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='admincomment',
|
||||
name='request',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dmessages.AdminRequest'),
|
||||
),
|
||||
]
|
||||
@@ -0,0 +1,18 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-21 07:21
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('dmessages', '0002_auto_20190920_2139'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='message',
|
||||
name='content',
|
||||
field=models.CharField(blank=True, max_length=2000, null=True),
|
||||
),
|
||||
]
|
||||
@@ -19,20 +19,20 @@ from .utils import create_comment_success_response
|
||||
|
||||
class Message(models.Model):
|
||||
id = models.CharField(max_length=30, primary_key=True)
|
||||
author = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
author = models.ForeignKey(User, related_name="+", on_delete=models.CASCADE)
|
||||
guild = models.ForeignKey(Guild, on_delete=models.CASCADE)
|
||||
channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
|
||||
channel = models.ForeignKey(Channel, related_name="+", on_delete=models.CASCADE)
|
||||
created_at = models.DateTimeField()
|
||||
modified_at = models.DateTimeField(null=True, blank=True)
|
||||
deleted_at = models.DateTimeField(null=True, blank=True)
|
||||
content = models.CharField(max_length=2000)
|
||||
previous_content = ArrayField(models.CharField(max_length=2000), default=[])
|
||||
tagged_users = models.ManyToManyField(User)
|
||||
tagged_channels = models.ManyToManyField(Channel)
|
||||
content = models.CharField(max_length=2000, null=True, blank=True)
|
||||
previous_content = ArrayField(models.CharField(max_length=2000), default=list)
|
||||
tagged_users = models.ManyToManyField(User, related_name="+")
|
||||
tagged_channels = models.ManyToManyField(Channel, related_name="+")
|
||||
tagged_roles = models.ManyToManyField(Role)
|
||||
tagged_everyone = models.BooleanField()
|
||||
embeds = ArrayField(models.TextField(), default=[])
|
||||
previous_embeds = ArrayField(ArrayField(models.TextField()), default=[])
|
||||
embeds = ArrayField(models.TextField(), default=list)
|
||||
previous_embeds = ArrayField(ArrayField(models.TextField()), default=list)
|
||||
|
||||
@classmethod
|
||||
def add_new_message(cls, data):
|
||||
@@ -46,7 +46,7 @@ class Message(models.Model):
|
||||
created_at = data.get('created_at')
|
||||
content = data.get('content')
|
||||
tagged_everyone = data.get('tagged_everyone')
|
||||
if not (id and author_id and guild_id and channel_id and created_at and content and tagged_everyone):
|
||||
if not (id and author_id and guild_id and channel_id and created_at and (tagged_everyone is not None)):
|
||||
return create_error_response("One or more required fields are missing.",
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
author = User.get_user_by_id(author_id)
|
||||
@@ -97,9 +97,9 @@ class Message(models.Model):
|
||||
|
||||
def update_message(self, data):
|
||||
if data.get('modified_at'):
|
||||
self.modified_at = data.get('modified_at')
|
||||
self.modified_at = datetime.fromtimestamp(int(data.get('modified_at')))
|
||||
if data.get('deleted_at'):
|
||||
self.modified_at = data.get('deleted_at')
|
||||
self.deleted_at = datetime.fromtimestamp(int(data.get('deleted_at')))
|
||||
if data.get('content'):
|
||||
content = data.get('content')
|
||||
if content != self.content:
|
||||
@@ -164,13 +164,15 @@ class GuildInfo(models.Model):
|
||||
|
||||
class AdminRequest(models.Model):
|
||||
guild = models.ForeignKey(Guild, on_delete=models.CASCADE)
|
||||
author = models.ForeignKey(User, on_delete=models.DO_NOTHING)
|
||||
author = models.ForeignKey(User, related_name="+", on_delete=models.DO_NOTHING)
|
||||
message = models.ForeignKey(Message, on_delete=models.DO_NOTHING)
|
||||
channel = models.ForeignKey(Channel, on_delete=models.DO_NOTHING)
|
||||
channel = models.ForeignKey(Channel, on_delete=models.DO_NOTHING, null=True)
|
||||
completed = models.BooleanField(default=False)
|
||||
requested_at = models.DateTimeField(auto_now_add=True, blank=True)
|
||||
completed_at = models.DateTimeField(null=True, blank=True, default=None)
|
||||
completed_by = models.ForeignKey(User, on_delete=models.DO_NOTHING, null=True, blank=True, default=None)
|
||||
completed_by = models.ForeignKey(
|
||||
User, related_name="+", on_delete=models.DO_NOTHING, null=True, blank=True, default=None
|
||||
)
|
||||
completed_message = models.CharField(max_length=1000, null=True, blank=True, default=None)
|
||||
content = models.CharField(max_length=2000)
|
||||
|
||||
@@ -179,7 +181,7 @@ class AdminRequest(models.Model):
|
||||
completed_by_id = data.get('completed_by')
|
||||
completed_message = data.get('message')
|
||||
if not self.completed and completed:
|
||||
self.completed_at = datetime.now()
|
||||
self.completed_at = datetime.utcnow()
|
||||
self.completed_message = completed_message
|
||||
user = User.get_user_by_id(completed_by_id)
|
||||
if not isinstance(user, User):
|
||||
@@ -226,6 +228,10 @@ class AdminRequest(models.Model):
|
||||
request.save()
|
||||
return create_request_success_response(request, status.HTTP_201_CREATED, many=False)
|
||||
|
||||
@classmethod
|
||||
def get_open_requests_by_guild(cls, guild_id):
|
||||
return cls.objects.filter(guild__id=guild_id).filter(completed=False)
|
||||
|
||||
@classmethod
|
||||
def get_request_by_id(cls, id):
|
||||
try:
|
||||
@@ -244,8 +250,7 @@ class AdminComment(models.Model):
|
||||
updated_at = models.DateTimeField(auto_now_add=True, blank=True)
|
||||
|
||||
@classmethod
|
||||
def add_new_comment(cls, data):
|
||||
request_id = data.get('request')
|
||||
def add_new_comment(cls, data, request_id):
|
||||
author_id = data.get('author')
|
||||
content = data.get('content')
|
||||
if not (request_id and author_id and content):
|
||||
@@ -259,7 +264,7 @@ class AdminComment(models.Model):
|
||||
if not isinstance(author, User):
|
||||
return create_error_response("Author Does Not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
comment = cls(
|
||||
request=request,
|
||||
author=author,
|
||||
@@ -274,3 +279,7 @@ class AdminComment(models.Model):
|
||||
return cls.objects.get(id=id)
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def get_comments_by_request(cls, request):
|
||||
return cls.objects.filter(request=request)
|
||||
|
||||
@@ -1,3 +1,124 @@
|
||||
from django.shortcuts import render
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework import status
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from rest_framework.response import Response
|
||||
from rest_framework import status
|
||||
|
||||
|
||||
from .models import Message
|
||||
from .models import AdminComment
|
||||
from .models import AdminRequest
|
||||
from .models import GuildInfo
|
||||
from geeksbot_v2.utils.api_utils import PaginatedAPIView
|
||||
from .utils import create_error_response
|
||||
from .utils import create_success_response
|
||||
from .utils import create_request_success_response
|
||||
from .utils import create_comment_success_response
|
||||
from .serializers import AdminRequestSerializer
|
||||
from .serializers import AdminCommentSerializer
|
||||
|
||||
# Create your views here.
|
||||
|
||||
# API Views
|
||||
|
||||
|
||||
class MessagesAPI(PaginatedAPIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, format=None):
|
||||
messages = Message.objects.all()
|
||||
page = self.paginate_queryset(messages)
|
||||
if page:
|
||||
return create_success_response(page, status.HTTP_200_OK, many=True)
|
||||
return create_success_response(messages, status.HTTP_200_OK, many=True)
|
||||
|
||||
def post(self, request, format=None):
|
||||
data = dict(request.data)
|
||||
return Message.add_new_message(data)
|
||||
|
||||
|
||||
class MessageDetailAPI(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, id, format=None):
|
||||
message = Message.get_message_by_id(id)
|
||||
if message:
|
||||
return create_success_response(message, status.HTTP_200_OK, many=False)
|
||||
else:
|
||||
return create_error_response("Message Does Not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def put(self, request, id, format=None):
|
||||
data = dict(request.data)
|
||||
message = Message.get_message_by_id(id)
|
||||
if message:
|
||||
return message.update_message(data)
|
||||
else:
|
||||
return create_error_response('Message Does Not Exist',
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
class RequestsAPI(PaginatedAPIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, guild, format=None):
|
||||
requests = AdminRequest.get_open_requests_by_guild(guild)
|
||||
page = self.paginate_queryset(requests)
|
||||
if page is not None:
|
||||
return create_request_success_response(page, status.HTTP_200_OK, many=True)
|
||||
|
||||
return create_request_success_response(requests, status.HTTP_200_OK, many=True)
|
||||
|
||||
def post(self, request, format=None):
|
||||
data = dict(request.data)
|
||||
return AdminRequest.add_new_request(data)
|
||||
|
||||
|
||||
class RequestDetailAPI(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, req, id, format=None):
|
||||
req = AdminRequest.get_request_by_id(id)
|
||||
if req:
|
||||
comments = AdminComment.get_comments_by_request(req)
|
||||
if comments:
|
||||
data = AdminRequestSerializer(req).data
|
||||
data['comments'] = AdminCommentSerializer(comments, many=True).data
|
||||
return Response(data, status.HTTP_200_OK)
|
||||
else:
|
||||
return create_request_success_response(req, status.HTTP_200_OK, many=False)
|
||||
else:
|
||||
return create_error_response("That Request Does Not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
def put(self, request, id, format=None):
|
||||
req = AdminRequest.get_request_by_id(id)
|
||||
if req:
|
||||
data = dict(request.data)
|
||||
return req.update_request(data)
|
||||
return create_error_response("That Request Does Not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
class CommentsAPI(PaginatedAPIView):
|
||||
permissions_classes = [IsAuthenticated]
|
||||
|
||||
def post(self, request, request_id, format=None):
|
||||
data = dict(request.data)
|
||||
return AdminComment.add_new_comment(data, request_id)
|
||||
|
||||
|
||||
class CommentDetailAPI(APIView):
|
||||
permissions_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, request_id, comment_id, format=None):
|
||||
comment = AdminComment.get_comment_by_id(comment_id)
|
||||
if comment:
|
||||
if comment.request.id != request_id:
|
||||
return create_error_response("That comment is not for this request",
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
return create_comment_success_response(comment, status.HTTP_200_OK, many=False)
|
||||
else:
|
||||
return create_error_response("Comment Does Not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
@@ -36,7 +36,7 @@ done
|
||||
>&2 echo 'PostgreSQL is available'
|
||||
|
||||
python manage.py collectstatic --noinput
|
||||
python manage.py makemigrations
|
||||
python manage.py makemigrations --noinput
|
||||
python manage.py migrate
|
||||
|
||||
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
from django.urls import path
|
||||
|
||||
from .views import GuildsAPI, GuildDetail
|
||||
from .views import RolesAPI, RoleDetailAPI
|
||||
|
||||
app_name = "users_api"
|
||||
app_name = "guilds_api"
|
||||
urlpatterns = [
|
||||
path("/", view=GuildsAPI.as_view(), name="list"),
|
||||
path("/<str:id>/", view=GuildDetail.as_view(), name='detail')
|
||||
path("", view=GuildsAPI.as_view(), name="list"),
|
||||
path("<str:id>/", view=GuildDetail.as_view(), name='detail'),
|
||||
path("<str:guild_id>/roles/", view=RolesAPI.as_view(), name="list"),
|
||||
path("<str:guild_id>/roles/<str:id>/", view=RoleDetailAPI.as_view(), name='detail'),
|
||||
]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-17 19:31
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
import django.contrib.postgres.fields
|
||||
from django.db import migrations, models
|
||||
@@ -28,7 +28,7 @@ class Migration(migrations.Migration):
|
||||
name='Role',
|
||||
fields=[
|
||||
('id', models.CharField(max_length=30, primary_key=True, serialize=False)),
|
||||
('type', models.PositiveSmallIntegerField()),
|
||||
('role_type', models.PositiveSmallIntegerField()),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-21 02:50
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('guilds', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='guild',
|
||||
name='admin_chat',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='guild',
|
||||
name='default_channel',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='guild',
|
||||
name='new_patron_channel',
|
||||
),
|
||||
]
|
||||
@@ -15,24 +15,15 @@ from .utils import create_role_success_response
|
||||
|
||||
class Guild(models.Model):
|
||||
id = models.CharField(max_length=30, primary_key=True)
|
||||
admin_chat = models.CharField(max_length=30, blank=True, null=True)
|
||||
new_patron_message = models.TextField(max_length=1000, blank=True, null=True)
|
||||
default_channel = models.CharField(max_length=30)
|
||||
new_patron_channel = models.CharField(max_length=30, blank=True, null=True)
|
||||
prefixes = ArrayField(models.CharField(max_length=10))
|
||||
|
||||
def __str__(self):
|
||||
return self.id
|
||||
|
||||
def update_guild(self, data):
|
||||
if data.get('admin_chat'):
|
||||
self.admin_chat = data.get('admin_chat')
|
||||
if data.get('new_patron_message'):
|
||||
self.new_patron_message = data.get('new_patron_message')
|
||||
if data.get('default_channel'):
|
||||
self.default_channel = data.get('default_channel')
|
||||
if data.get('new_patron_channel'):
|
||||
self.new_patron_channel = data.get('new_patron_channel')
|
||||
if data.get('add_prefix'):
|
||||
if data.get('add_prefix') not in self.prefixes:
|
||||
self.prefixes.append(data.get('add_prefix'))
|
||||
@@ -55,9 +46,8 @@ class Guild(models.Model):
|
||||
@classmethod
|
||||
def create_guild(cls, data):
|
||||
id = data.get('id')
|
||||
default_channel = data.get('default_channel')
|
||||
if not (id and default_channel):
|
||||
return create_error_response('id and default_channel are required',
|
||||
if not id:
|
||||
return create_error_response('ID is required',
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
if cls.get_guild_by_id(id):
|
||||
@@ -66,11 +56,8 @@ class Guild(models.Model):
|
||||
|
||||
guild = cls(
|
||||
id=id,
|
||||
default_channel=default_channel,
|
||||
prefixes=data.get('prefixes'),
|
||||
admin_chat=data.get('admin_chat'),
|
||||
new_patron_message=data.get('new_patron_message'),
|
||||
new_patron_channel=data.get('new_patron_channel')
|
||||
new_patron_message=data.get('new_patron_message')
|
||||
)
|
||||
guild.save()
|
||||
return create_success_response(guild, status.HTTP_201_CREATED, many=False)
|
||||
@@ -89,11 +76,10 @@ class Role(models.Model):
|
||||
return create_role_success_response(self, status=status.HTTP_202_ACCEPTED, many=False)
|
||||
|
||||
@classmethod
|
||||
def add_new_role(cls, data):
|
||||
def add_new_role(cls, guild_id, data):
|
||||
id = data.get('id')
|
||||
guild_id = data.get('guild')
|
||||
role_type = data.get('role_type')
|
||||
if not (id and guild_id and role_type):
|
||||
if not (id and guild_id and (role_type is not None)):
|
||||
return create_error_response("The Role ID, Guild, and Role Type are required",
|
||||
status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
@@ -132,5 +118,9 @@ class Role(models.Model):
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def get_guild_roles(cls, guild):
|
||||
return cls.objects.filter(guild__id=guild)
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.guild.id} | {self.id}"
|
||||
|
||||
@@ -13,4 +13,4 @@ class GuildSerializer(serializers.ModelSerializer):
|
||||
class RoleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Role
|
||||
fields = ["id", "guild", "type"]
|
||||
fields = ["id", "guild", "role_type"]
|
||||
|
||||
@@ -5,8 +5,10 @@ from django.core.exceptions import ObjectDoesNotExist
|
||||
|
||||
from geeksbot_v2.utils.api_utils import PaginatedAPIView
|
||||
from .models import Guild
|
||||
from .models import Role
|
||||
from .utils import create_error_response
|
||||
from .utils import create_success_response
|
||||
from .utils import create_role_success_response
|
||||
|
||||
# Create your views here.
|
||||
|
||||
@@ -67,3 +69,45 @@ class GuildDetail(APIView):
|
||||
else:
|
||||
return create_error_response('Guild Does Not Exist',
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
|
||||
class RolesAPI(PaginatedAPIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, guild_id, format=None):
|
||||
roles = Role.get_guild_roles(guild_id)
|
||||
page = self.paginate_queryset(roles)
|
||||
if page is not None:
|
||||
return create_success_response(page, status.HTTP_200_OK, many=True)
|
||||
|
||||
return create_success_response(roles, status.HTTP_200_OK, many=True)
|
||||
|
||||
def post(self, request, guild_id, format=None):
|
||||
data = dict(request.data)
|
||||
return Role.add_new_role(guild_id, data)
|
||||
|
||||
|
||||
class RoleDetailAPI(APIView):
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def get(self, request, guild_id, id, format=None):
|
||||
try:
|
||||
role = Role.objects.get(id=id)
|
||||
except ObjectDoesNotExist:
|
||||
return create_error_response("Guild Does not Exist",
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
else:
|
||||
return create_role_success_response(role,
|
||||
status=status.HTTP_200_OK)
|
||||
|
||||
def put(self, request, guild_id, id, format=None):
|
||||
role = Role.get_role_by_id(id)
|
||||
|
||||
if role:
|
||||
data = dict(request.data)
|
||||
role = role.update_role(data)
|
||||
return create_role_success_response(role,
|
||||
status=status.HTTP_202_ACCEPTED)
|
||||
else:
|
||||
return create_error_response('Guild Does Not Exist',
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-17 19:31
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
@@ -16,10 +16,9 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='PatreonCreator',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('creator', models.CharField(max_length=50)),
|
||||
('link', models.CharField(max_length=100)),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
('creator', models.CharField(max_length=50, primary_key=True, serialize=False)),
|
||||
('link', models.CharField(max_length=100, unique=True)),
|
||||
('guilds', models.ManyToManyField(to='guilds.Guild')),
|
||||
],
|
||||
),
|
||||
migrations.CreateModel(
|
||||
@@ -30,7 +29,8 @@ class Migration(migrations.Migration):
|
||||
('description', models.TextField()),
|
||||
('amount', models.IntegerField(null=True)),
|
||||
('creator', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='patreon.PatreonCreator')),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
('guild', models.ManyToManyField(to='guilds.Guild')),
|
||||
('next_lower_tier', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='patreon.PatreonTier')),
|
||||
('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Role')),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -70,7 +70,7 @@ class PatreonTier(models.Model):
|
||||
description = models.TextField()
|
||||
role = models.ForeignKey(Role, on_delete=models.CASCADE)
|
||||
amount = models.IntegerField(null=True)
|
||||
next_lower_tier = models.ForeignKey('self', null=True, blank=True)
|
||||
next_lower_tier = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
def update_tier(self, data):
|
||||
if data.get('guild'):
|
||||
@@ -97,17 +97,17 @@ class PatreonTier(models.Model):
|
||||
return create_error_response('Next Lower Tier Does Not Exist',
|
||||
status=status.HTTP_404_NOT_FOUND)
|
||||
self.next_lower_tier = tier
|
||||
|
||||
|
||||
self.save()
|
||||
return create_success_tier_response(tier, status.HTTP_202_ACCEPTED, many=False)
|
||||
|
||||
|
||||
@classmethod
|
||||
def get_tier_by_id(cls, id):
|
||||
try:
|
||||
return cls.objects.get(id=id)
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
|
||||
|
||||
@classmethod
|
||||
def add_new_tier(cls, data):
|
||||
creator_str = data.get('creator')
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-17 19:31
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
@@ -10,9 +9,9 @@ class Migration(migrations.Migration):
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('dmessages', '0001_initial'),
|
||||
('guilds', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('dmessages', '0001_initial'),
|
||||
('channels', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
@@ -25,13 +24,12 @@ class Migration(migrations.Migration):
|
||||
('port', models.PositiveIntegerField()),
|
||||
('password', models.CharField(max_length=50)),
|
||||
('monitor_chat', models.BooleanField()),
|
||||
('monitor_chat_channel', models.CharField(blank=True, max_length=30)),
|
||||
('alerts_channel', models.CharField(blank=True, max_length=30)),
|
||||
('info_channel', models.CharField(blank=True, max_length=30)),
|
||||
('alerts_channel', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='channels.Channel')),
|
||||
('guild', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='guilds.Guild')),
|
||||
('info_message', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dmessages.Message')),
|
||||
('settings_message', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='+', to='dmessages.Message')),
|
||||
('whitelist', models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL)),
|
||||
('info_channel', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='channels.Channel')),
|
||||
('info_message', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='dmessages.Message')),
|
||||
('monitor_chat_channel', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='channels.Channel')),
|
||||
('settings_message', models.ForeignKey(blank=True, default=None, null=True, on_delete=django.db.models.deletion.DO_NOTHING, related_name='+', to='dmessages.Message')),
|
||||
],
|
||||
),
|
||||
]
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('rcon', '0001_initial'),
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='rconserver',
|
||||
name='whitelist',
|
||||
field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
||||
@@ -4,6 +4,6 @@ from geeksbot_v2.users.views import UsersAPI, UserDetail
|
||||
|
||||
app_name = "users_api"
|
||||
urlpatterns = [
|
||||
path("/", view=UsersAPI.as_view(), name="list"),
|
||||
path("/<str:id>/", view=UserDetail.as_view(), name="detail"),
|
||||
path("", view=UsersAPI.as_view(), name="list"),
|
||||
path("<str:id>/", view=UserDetail.as_view(), name="detail"),
|
||||
]
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-17 19:38
|
||||
# Generated by Django 2.2.4 on 2019-09-20 21:39
|
||||
|
||||
from django.conf import settings
|
||||
import django.contrib.auth.models
|
||||
@@ -25,7 +25,6 @@ class Migration(migrations.Migration):
|
||||
('password', models.CharField(max_length=128, verbose_name='password')),
|
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
||||
('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
|
||||
('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
|
||||
('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')),
|
||||
('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')),
|
||||
('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')),
|
||||
@@ -33,11 +32,12 @@ class Migration(migrations.Migration):
|
||||
('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
|
||||
('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
|
||||
('name', models.CharField(blank=True, max_length=255, verbose_name='Name of User')),
|
||||
('username', models.CharField(help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')),
|
||||
('id', models.CharField(max_length=30, primary_key=True, serialize=False)),
|
||||
('discord_username', models.CharField(max_length=100, null=True)),
|
||||
('previous_discord_usernames', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=100), blank=True, null=True, size=None)),
|
||||
('discriminator', models.IntegerField(null=True)),
|
||||
('previous_discriminators', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), blank=True, null=True, size=None)),
|
||||
('discriminator', models.CharField(max_length=4, null=True)),
|
||||
('previous_discriminators', django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=4), blank=True, null=True, size=None)),
|
||||
('steam_id', models.CharField(blank=True, max_length=30, null=True)),
|
||||
('animated', models.BooleanField(blank=True, null=True)),
|
||||
('avatar', models.CharField(blank=True, max_length=100, null=True)),
|
||||
@@ -61,9 +61,9 @@ class Migration(migrations.Migration):
|
||||
name='UserLog',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('time', models.DateTimeField()),
|
||||
('time', models.DateTimeField(auto_now_add=True)),
|
||||
('action', models.IntegerField()),
|
||||
('description', models.CharField(max_length=100)),
|
||||
('description', models.CharField(blank=True, max_length=100, null=True)),
|
||||
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
|
||||
],
|
||||
),
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-17 21:09
|
||||
|
||||
import django.contrib.auth.validators
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='username',
|
||||
field=models.CharField(help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username'),
|
||||
),
|
||||
]
|
||||
@@ -1,24 +0,0 @@
|
||||
# Generated by Django 2.2.4 on 2019-09-18 05:54
|
||||
|
||||
import django.contrib.postgres.fields
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0002_auto_20190917_2109'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='discriminator',
|
||||
field=models.CharField(max_length=4, null=True),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='previous_discriminators',
|
||||
field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(max_length=4), blank=True, null=True, size=None),
|
||||
),
|
||||
]
|
||||
Reference in New Issue
Block a user