feat(bot): ✨ Initialize DB and bot.

This commit is contained in:
Nyeki.py
2024-10-14 14:33:38 -03:00
parent f3654b2c71
commit 3059ec8446
7 changed files with 559 additions and 0 deletions
+6
View File
@@ -0,0 +1,6 @@
from discord.ext import bridge
# TODO: Make it an AutoShardedBot on production.
class Payphone(bridge.Bot):
pass
View File
+128
View File
@@ -0,0 +1,128 @@
from datetime import datetime
import enum
from tortoise import models, fields
class User(models.Model):
id: int = fields.BigIntField(primary_key=True)
username: str = fields.CharField(max_length=32)
is_masked: bool = fields.BooleanField(default=False)
profiles: fields.BackwardFKRelation["Profile"]
call_rss: fields.BackwardFKRelation["CallUserChannelRelationship"]
class Profile(models.Model):
user: fields.ForeignKeyRelation["User"] = fields.ForeignKeyField(
"models.User", related_name="profiles"
)
server: fields.ForeignKeyRelation["Server"] = fields.ForeignKeyField(
"models.Server", related_name="profiles"
)
image_url: str = fields.TextField()
name: str = fields.CharField(max_length=32)
color: int | None = fields.IntField(null=True, default=None)
call_rss: fields.BackwardFKRelation["CallUserChannelRelationship"]
class Meta:
unique_together = [("user_id", "server_id")]
class Server(models.Model):
id: int = fields.BigIntField(primary_key=True)
channels: fields.BackwardFKRelation["Channel"]
profiles: fields.BackwardFKRelation["Profile"]
class Channel(models.Model):
id = fields.BigIntField(primary_key=True)
server: fields.ForeignKeyRelation[Server] = fields.ForeignKeyField(
"models.Server", related_name="channels"
)
is_nsfw = fields.BooleanField()
call = fields.ForeignKeyField("models.Call", null=True, related_name="channels")
webhook_id = fields.BigIntField(null=True)
webhook_url = fields.TextField()
call_rss: fields.BackwardFKRelation["CallUserChannelRelationship"]
class Call(models.Model):
is_nsfw = fields.BooleanField()
started_at = fields.DatetimeField(auto_now_add=True)
ended_at = fields.DatetimeField(null=True, default=None)
channels: fields.BackwardFKRelation["Channel"]
call_rss: fields.BackwardFKRelation["CallUserChannelRelationship"]
class CallUserChannelRelationship(models.Model):
call = fields.ForeignKeyField("models.Call", related_name="call_rss")
user = fields.ForeignKeyField("models.User", related_name="call_rss")
profile = fields.ForeignKeyField("models.Profile", related_name="call_rss")
channel = fields.ForeignKeyField("models.Channel", related_name="call_rss")
is_masked = fields.BooleanField()
mask = fields.BigIntField()
class Meta:
unique_together = [("call_id", "user_id", "channel_id")]
class Message(models.Model):
id = fields.BigIntField(primary_key=True)
channel = fields.ForeignKeyField("models.Channel")
user = fields.ForeignKeyField("models.User")
profile = fields.ForeignKeyField("models.Profile")
mask = fields.BigIntField(null=True)
was_deleted = fields.BooleanField(default=False)
was_propagated = fields.BooleanField(default=False)
created_at = fields.DatetimeField(auto_now_add=True)
class MessageContent(models.Model):
message = fields.ForeignKeyField("models.Message", related_name="contents")
content = fields.CharField(max_length=4096)
was_propagated = fields.BooleanField()
created_at = fields.DatetimeField(auto_now_add=True)
class ReportStatus(enum.IntEnum):
ACCEPTED = 0
DECLINED = 1
ON_REVIEW = 2
class Report(models.Model):
call: fields.ForeignKeyRelation["Call"] = fields.ForeignKeyField("models.Call")
reported_by: fields.ForeignKeyNullableRelation["User"] = fields.ForeignKeyField(
"users.User", null=True
)
reason: str = fields.CharField(max_length=500)
priority: int = fields.IntField()
status: ReportStatus = fields.IntEnumField(ReportStatus)
created_at: datetime = fields.DatetimeField(auto_now_add=True)
class BanStatus(enum.IntEnum):
VALID = 0
APPEALED = 1
class Ban(models.Model):
user: fields.ForeignKeyRelation["User"] = fields.ForeignKeyField(
"models.User", related_name="bans"
)
notification_message_id: int = fields.BigIntField(null=True)
reason: str = fields.CharField(max_length=500)
appeal: str | None = fields.CharField(max_length=500, null=True)
status: BanStatus = fields.IntEnumField(BanStatus)
banned_by: fields.ForeignKeyRelation["User"] = fields.ForeignKeyField(
"models.User", related_name="bans_created"
)
created_at: datetime = fields.DatetimeField(auto_now_add=True)
expires_at: datetime | None = fields.DatetimeField(null=True)
class Meta:
indexes = [("user_id", "expires_at")]