Heimdallr/database.py

145 lines
3.3 KiB
Python

import datetime
import os
from dotenv import load_dotenv
from peewee import (
SqliteDatabase,
PostgresqlDatabase,
Model,
BigIntegerField,
CharField,
TextField,
DateTimeField,
AutoField,
FloatField,
BooleanField,
CompositeKey,
ForeignKeyField,
)
db = None
if (postgres_url := os.getenv("HEIMDALLR_POSTGRES_URL")) is not None:
db = PostgresqlDatabase(postgres_url)
else:
db = SqliteDatabase("heimdallr.db")
class Infractions(Model):
id = AutoField()
guild_id = BigIntegerField()
user_id = BigIntegerField()
at_time = DateTimeField(default=datetime.datetime.now)
weight = FloatField(default=1.0)
reason = TextField(null=True)
given_by = BigIntegerField()
silent = BooleanField(default=False)
class Meta:
table_name = "Infractions"
database = db
class GuildSettings(Model):
guild_id = BigIntegerField(primary_key=True)
admin_channel = BigIntegerField(null=True)
use_name_filter = BooleanField(default=False)
use_gatekeep = BooleanField(default=False)
use_logging = BooleanField(default=False)
class Meta:
table_name = "GuildSettings"
database = db
class JoinLeave(Model):
guild_id = BigIntegerField(primary_key=True)
join_message = TextField(null=True)
leave_message = TextField(null=True)
message_channel = BigIntegerField(null=True)
join_message_enabled = BooleanField(default=True)
leave_message_enabled = BooleanField(default=False)
class Meta:
table_name = "JoinLeave"
database = db
class SelfRoles(Model):
guild_id = BigIntegerField()
role_id = BigIntegerField()
role_name = TextField()
role_description = TextField(null=True)
requires = BigIntegerField(null=True)
class Meta:
primary_key = CompositeKey("guild_id", "role_id")
table_name = "SelfRoles"
database = db
class ConditionalRoles(Model):
guild_id = BigIntegerField()
role_id = BigIntegerField()
condition = CharField(max_length=16)
condition_data = TextField()
class Meta:
primary_key = CompositeKey("guild_id", "role_id")
table_name = "ConditionalRoles"
database = db
class BotMessages(Model):
guild_id = BigIntegerField()
channel_id = BigIntegerField()
message_id = BigIntegerField()
class Meta:
primary_key = CompositeKey("guild_id", "channel_id", "message_id")
table_name = "BotMessages"
database = db
class Resources(Model):
id = AutoField()
guild_id = BigIntegerField()
title = TextField()
description = TextField()
url = TextField()
class Meta:
table_name = "Resources"
database = db
class ResourceTags(Model):
resource_id = ForeignKeyField(Resources, to_field="id")
tag = TextField()
class Meta:
primary_key = CompositeKey("resource_id", "tag")
table_name = "ResourceTags"
database = db
class BadNames(Model):
id = AutoField()
guild_id = BigIntegerField()
regex = TextField()
class Meta:
table_name = "BadNames"
database = db
class NotifyWords(Model):
id = AutoField()
guild_id = BigIntegerField()
word = TextField()
user_to_notify = BigIntegerField()
class Meta:
table_name = "NotifyWords"
database = db