is_bot_operational
field on the Server model
All checks were successful
Build and Push Docker Image / build (push) Successful in 13s
All checks were successful
Build and Push Docker Image / build (push) Successful in 13s
True, False or None indicates if the bot is a member of said server, and has sufficient permissions to perform it's job. Starts as None (unknown) and becomes True or False when calling a server's `/generate-channels/` endpoint.
This commit is contained in:
parent
b324b6accb
commit
35c8e7582b
@ -10,16 +10,17 @@ from apps.home.models import (
|
|||||||
ContentFilter,
|
ContentFilter,
|
||||||
MessageMutator,
|
MessageMutator,
|
||||||
MessageStyle,
|
MessageStyle,
|
||||||
|
UniqueContentRule,
|
||||||
DiscordChannel,
|
DiscordChannel,
|
||||||
Subscription,
|
Subscription,
|
||||||
Content,
|
Content,
|
||||||
UniqueContentRule
|
|
||||||
)
|
)
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
#region Dynamic Model
|
# region Dynamic Model
|
||||||
|
|
||||||
# This DynamicModelSerializer is from a StackOverflow user in an obscure thread.
|
# This DynamicModelSerializer is from a StackOverflow user in an obscure thread.
|
||||||
# I wish that I could remember which thread, because god bless that man.
|
# I wish that I could remember which thread, because god bless that man.
|
||||||
|
|
||||||
@ -119,12 +120,22 @@ class DynamicModelSerializer(serializers.ModelSerializer):
|
|||||||
abstract = True
|
abstract = True
|
||||||
|
|
||||||
|
|
||||||
|
# region Servers
|
||||||
|
|
||||||
class ServerSerializer(DynamicModelSerializer):
|
class ServerSerializer(DynamicModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Server
|
model = Server
|
||||||
fields = ("id", "name", "icon_hash", "active")
|
fields = (
|
||||||
|
"id",
|
||||||
|
"name",
|
||||||
|
"icon_hash",
|
||||||
|
"is_bot_operational",
|
||||||
|
"active"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# region Filters
|
||||||
|
|
||||||
class ContentFilterSerializer(DynamicModelSerializer):
|
class ContentFilterSerializer(DynamicModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = ContentFilter
|
model = ContentFilter
|
||||||
@ -139,12 +150,16 @@ class ContentFilterSerializer(DynamicModelSerializer):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
# region Msg Mutators
|
||||||
|
|
||||||
class MessageMutatorSerializer(DynamicModelSerializer):
|
class MessageMutatorSerializer(DynamicModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = MessageMutator
|
model = MessageMutator
|
||||||
fields = ("id", "name", "value")
|
fields = ("id", "name", "value")
|
||||||
|
|
||||||
|
|
||||||
|
# region Msg Styles
|
||||||
|
|
||||||
class MessageStyleSerializer(DynamicModelSerializer):
|
class MessageStyleSerializer(DynamicModelSerializer):
|
||||||
title_mutator_detail = serializers.SerializerMethodField()
|
title_mutator_detail = serializers.SerializerMethodField()
|
||||||
description_mutator_detail = serializers.SerializerMethodField()
|
description_mutator_detail = serializers.SerializerMethodField()
|
||||||
@ -183,12 +198,16 @@ class MessageStyleSerializer(DynamicModelSerializer):
|
|||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
|
# region Rules
|
||||||
|
|
||||||
class UniqueContentRuleSerializer(DynamicModelSerializer):
|
class UniqueContentRuleSerializer(DynamicModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UniqueContentRule
|
model = UniqueContentRule
|
||||||
fields = ("id", "name", "value")
|
fields = ("id", "name", "value")
|
||||||
|
|
||||||
|
|
||||||
|
# region Subscriptions
|
||||||
|
|
||||||
class DiscordChannelField(serializers.PrimaryKeyRelatedField):
|
class DiscordChannelField(serializers.PrimaryKeyRelatedField):
|
||||||
def to_internal_value(self, data):
|
def to_internal_value(self, data):
|
||||||
try:
|
try:
|
||||||
@ -299,6 +318,8 @@ class SubscriptionSerializer(DynamicModelSerializer):
|
|||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
# region Content
|
||||||
|
|
||||||
class ContentSerializer(DynamicModelSerializer):
|
class ContentSerializer(DynamicModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Content
|
model = Content
|
||||||
|
@ -16,8 +16,14 @@ from .models import (
|
|||||||
|
|
||||||
@admin.register(Server)
|
@admin.register(Server)
|
||||||
class ServerAdmin(admin.ModelAdmin):
|
class ServerAdmin(admin.ModelAdmin):
|
||||||
list_display = ["id", "name", "icon_hash", "active"]
|
list_display = [
|
||||||
list_display_links = ["name"]
|
"id",
|
||||||
|
"name",
|
||||||
|
"icon_hash",
|
||||||
|
"is_bot_operational",
|
||||||
|
"active"
|
||||||
|
]
|
||||||
|
list_display_links = ["id"]
|
||||||
|
|
||||||
|
|
||||||
@admin.register(ContentFilter)
|
@admin.register(ContentFilter)
|
||||||
|
18
apps/home/migrations/0011_server_is_bot_operational.py
Normal file
18
apps/home/migrations/0011_server_is_bot_operational.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0.4 on 2024-10-11 16:10
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('home', '0010_discordchannel_name'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='server',
|
||||||
|
name='is_bot_operational',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
]
|
18
apps/home/migrations/0012_alter_server_is_bot_operational.py
Normal file
18
apps/home/migrations/0012_alter_server_is_bot_operational.py
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Generated by Django 5.0.4 on 2024-10-11 16:19
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('home', '0011_server_is_bot_operational'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterField(
|
||||||
|
model_name='server',
|
||||||
|
name='is_bot_operational',
|
||||||
|
field=models.BooleanField(default=None, null=True),
|
||||||
|
),
|
||||||
|
]
|
@ -23,6 +23,7 @@ class Server(models.Model):
|
|||||||
id = models.PositiveIntegerField(primary_key=True)
|
id = models.PositiveIntegerField(primary_key=True)
|
||||||
name = models.CharField(max_length=128)
|
name = models.CharField(max_length=128)
|
||||||
icon_hash = models.CharField(max_length=128, blank=True, null=True)
|
icon_hash = models.CharField(max_length=128, blank=True, null=True)
|
||||||
|
is_bot_operational = models.BooleanField(default=None, null=True)
|
||||||
active = models.BooleanField(default=True)
|
active = models.BooleanField(default=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
|
@ -158,10 +158,19 @@ class ChannelsView(View):
|
|||||||
|
|
||||||
channels_data, status = await self._get_channel_data(guild_id)
|
channels_data, status = await self._get_channel_data(guild_id)
|
||||||
|
|
||||||
|
# Not authorized means the bot isn't operational, we need to save that
|
||||||
|
if status == 403:
|
||||||
|
server.is_bot_operational = False
|
||||||
|
await server.asave()
|
||||||
|
|
||||||
# Send back the error data if status is bad
|
# Send back the error data if status is bad
|
||||||
if status != 200:
|
if status != 200:
|
||||||
return JsonResponse(channels_data, status=status, safe=False)
|
return JsonResponse(channels_data, status=status, safe=False)
|
||||||
|
|
||||||
|
# Because the status is 200, we know the Bot is functional, set that param
|
||||||
|
server.is_bot_operational = True
|
||||||
|
await server.asave()
|
||||||
|
|
||||||
cleaned_channels_data = await self._clean_channels_data(server, channels_data)
|
cleaned_channels_data = await self._clean_channels_data(server, channels_data)
|
||||||
await self._cleanup_dead_channels(server, cleaned_channels_data)
|
await self._cleanup_dead_channels(server, cleaned_channels_data)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user