"""JARVIS database models.""" from datetime import datetime import marshmallow as ma from umongo import Document, fields from jarvis_core.db import JARVIS_INST class RawField(fields.BaseField, ma.fields.Raw): pass @JARVIS_INST.register class Autopurge(Document): guild = fields.IntegerField(required=True) channel = fields.IntegerField(required=True) delay = fields.IntegerField(default=30) admin = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.now) @JARVIS_INST.register class Autoreact(Document): guild = fields.IntegerField(required=True) channel = fields.IntegerField(required=True) reactions = fields.ListField(fields.StringField()) admin = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.now) @JARVIS_INST.register class Ban(Document): active = fields.BooleanField(default=True) admin = fields.IntegerField(required=True) user = fields.IntegerField(required=True) username = fields.StringField(required=True) discrim = fields.IntegerField(required=True) duration = fields.IntegerField(required=False) guild = fields.IntegerField(required=True) type = fields.StringField(default="perm") reason = fields.StringField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Config(Document): """Config database object.""" key = fields.StringField(required=True) value = RawField(required=True) @JARVIS_INST.register class Guess(Document): """Guess database object.""" correct = fields.BooleanField(default=False) guess = fields.StringField(required=True) user = fields.IntegerField(required=True) @JARVIS_INST.register class Joke(Document): """Joke database object.""" rid = fields.StringField() body = fields.StringField() title = fields.StringField() created_utc = fields.DateTimeField() over_18 = fields.BooleanField() score = fields.IntegerField() @JARVIS_INST.register class Kick(Document): """Kick database object.""" admin = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) reason = fields.StringField(required=True) user = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Lock(Document): """Lock database object.""" active = fields.BooleanField(default=True) admin = fields.IntegerField(required=True) channel = fields.IntegerField(required=True) duration = fields.IntegerField(default=10) guild = fields.IntegerField(required=True) reason = fields.StringField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Mute(Document): """Mute database object.""" active = fields.BooleanField(default=True) user = fields.IntegerField(required=True) admin = fields.IntegerField(required=True) duration = fields.IntegerField(default=10) guild = fields.IntegerField(required=True) reason = fields.StringField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Purge(Document): """Purge database object.""" admin = fields.IntegerField(required=True) channel = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) count = fields.IntegerField(default=10) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Reminder(Document): """Reminder database object.""" active = fields.BooleanField(default=True) user = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) channel = fields.IntegerField(required=True) message = fields.StringField(required=True) remind_at = fields.DateTimeField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) private = fields.BooleanField(default=False) @JARVIS_INST.register class Rolegiver(Document): """Rolegiver database object.""" guild = fields.IntegerField(required=True) roles = fields.ListField(fields.IntegerField()) @JARVIS_INST.register class Roleping(Document): """Roleping database object.""" active = fields.BooleanField(default=True) role = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) admin = fields.IntegerField(required=True) bypass = fields.DictField() created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Setting(Document): """Setting database object.""" guild = fields.IntegerField(required=True) setting = fields.StringField(required=True) value = RawField() @JARVIS_INST.register class Star(Document): """Star database object.""" active = fields.BooleanField(default=True) index = fields.IntegerField(required=True) message = fields.IntegerField(required=True) channel = fields.IntegerField(required=True) starboard = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) admin = fields.IntegerField(required=True) star = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Starboard(Document): """Starboard database object.""" channel = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) admin = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Twitter(Document): """Twitter Follow object.""" active = fields.BooleanField(default=True) twitter_id = fields.IntegerField(required=True) handle = fields.StringField(required=True) channel = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) last_tweet = fields.IntegerField(required=True) retweets = fields.BooleanField(default=True) admin = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) last_sync = fields.DateTimeField() @JARVIS_INST.register class Unban(Document): """Unban database object.""" user = fields.IntegerField(required=True) username = fields.StringField(required=True) discrim = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) admin = fields.IntegerField(required=True) reason = fields.StringField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) @JARVIS_INST.register class Warning(Document): """Warning database object.""" active = fields.BooleanField(default=True) admin = fields.IntegerField(required=True) user = fields.IntegerField(required=True) guild = fields.IntegerField(required=True) duration = fields.IntegerField(default=24) reason = fields.StringField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow)