initial commit

This commit is contained in:
2024-01-02 00:25:23 +03:00
commit 26f511535a
27 changed files with 2023 additions and 0 deletions

View File

View File

@@ -0,0 +1,29 @@
import logging
from asyncio import get_event_loop
from peewee_async import PostgresqlDatabase, Manager
from kurocore.logger import BotLogger
class Database:
db: PostgresqlDatabase = PostgresqlDatabase(None)
manager: Manager
def __init__(self, settings):
db_settings = settings.database
driver_name = db_settings.driver
host = db_settings.host
name = db_settings.name
user = db_settings.user
password = db_settings.password
port = db_settings.port
if driver_name.lower() not in ('postgres', 'postgresql', 'psql'):
raise
Database.db.init(name, user=user, password=password, host=host, port=port)
loop = get_event_loop()
Database.manager = Manager(Database.db, loop=loop)
Database.manager.allow_sync = logging.ERROR
BotLogger.log.info('Connected to database')

View File

@@ -0,0 +1,173 @@
from peewee import Model, IntegerField, BigIntegerField, DecimalField, TextField, ForeignKeyField, DateTimeField, \
BooleanField, CompositeKey, CharField, AutoField
# from plugins import models
from utils.database.database import Database
class BaseModel(Model):
class Meta:
database = Database.db
class Groups(BaseModel):
id = IntegerField(null=False)
name = TextField(default='')
is_vip = BooleanField(default=False)
is_admin = BooleanField(default=False)
is_tester = BooleanField(default=False)
multiplier = DecimalField(default=1)
sale = DecimalField(default=1)
max_multigen = IntegerField(default=3)
class Works(BaseModel):
id = IntegerField(null=False)
name = TextField(default='')
required_lvl = IntegerField(default=1)
money_income = DecimalField(default=0)
min_exp = IntegerField(default=0)
max_exp = IntegerField(default=0)
class Fractions(BaseModel):
id = IntegerField()
name = TextField(default='Без названия', null=False)
owner_id = IntegerField(null=False)
money = DecimalField()
exp = IntegerField()
level = IntegerField()
class Auto(BaseModel):
id = IntegerField()
name = TextField()
price = DecimalField()
class Meta:
table_name = 'shop_auto'
class Business(BaseModel):
id = IntegerField()
name = TextField()
price = DecimalField()
income = DecimalField()
class Meta:
table_name = 'shop_business'
class Maid(BaseModel):
id = IntegerField()
name = TextField()
price = DecimalField()
income = DecimalField()
class Meta:
table_name = 'shop_maid'
class Miner(BaseModel):
id = IntegerField()
name = TextField()
price = DecimalField()
income = DecimalField()
class Meta:
table_name = 'shop_miner'
class Users(BaseModel):
id = IntegerField()
user_id = BigIntegerField()
name = TextField()
greeting = TextField()
pair = IntegerField()
donat = IntegerField()
balance = DecimalField(default=10000, max_digits=20)
invested = DecimalField(default=0, max_digits=20)
btc = DecimalField(default=0, max_digits=20, decimal_places=6)
level = IntegerField()
exp = DecimalField(default=0)
group_id = IntegerField()
group = ForeignKeyField(Groups)
fraction = ForeignKeyField(Fractions, null=True, lazy_load=True)
work = ForeignKeyField(Works)
work_time = DateTimeField()
income_time = DateTimeField()
auto = ForeignKeyField(Auto)
business = ForeignKeyField(Business)
maid = ForeignKeyField(Maid)
miner = ForeignKeyField(Miner)
subscribed = BooleanField()
class Reports(BaseModel):
id = IntegerField(unique=True, null=False, primary_key=True)
text = TextField(null=False)
admin_answer = TextField(null=True)
from_id = BigIntegerField(null=False)
date = DateTimeField()
status = CharField(null=False)
attachments = TextField(null=True)
class FractionMember(BaseModel):
fraction = ForeignKeyField(Fractions)
user = ForeignKeyField(Users)
is_moderator = BooleanField()
is_admin = BooleanField()
class Meta:
table_name = 'fraction_member'
primary_key = CompositeKey('fraction', 'user')
# WD
class WDModels(BaseModel):
model_id = IntegerField(null=False)
name = TextField(null=False)
image = TextField(null=False)
description = TextField(null=False)
class Meta:
table_name = 'wd_models'
class WDUsers(BaseModel):
user_id = IntegerField(null=False)
model = ForeignKeyField(WDModels)
model_id = IntegerField(null=False, default=1)
orientation = TextField(null=False, default='PORTRAIT')
class Meta:
table_name = 'wd_users'
primary_key = CompositeKey('user_id', 'model_id')
class WDLoras(BaseModel):
id = IntegerField(null=False)
name = TextField(null=False, default='NOT SET')
trigger_prompt = TextField(null=False, default='')
prompt_mixin = TextField(null=False, default='')
class Meta:
table_name = 'wd_loras'
primary_key = CompositeKey('id', 'trigger_prompt')
class WDPrompts(BaseModel):
id = AutoField(null=False)
user_id = IntegerField(null=False)
prompt = TextField(null=False)
class Meta:
table_name = 'wd_prompts'