feat(bot): ✨ Initialize DB and bot.
This commit is contained in:
@@ -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")]
|
||||
Reference in New Issue
Block a user