diff --git a/.flake8 b/.flake8 index 4864a54..56091ca 100644 --- a/.flake8 +++ b/.flake8 @@ -17,3 +17,6 @@ extend-ignore = R503, # missing explicit return at the end of function ableto return non-None value. max-line-length=100 + +per-file-ignores = + jarvis_core/db/models/__init__.py:F401 diff --git a/jarvis_core/db/models.py b/jarvis_core/db/models/__init__.py similarity index 57% rename from jarvis_core/db/models.py rename to jarvis_core/db/models/__init__.py index a08d8ff..260dd51 100644 --- a/jarvis_core/db/models.py +++ b/jarvis_core/db/models/__init__.py @@ -5,6 +5,9 @@ import marshmallow as ma from umongo import Document, fields from jarvis_core.db import JARVIS_INST +from jarvis_core.db.models.actions import Ban, Kick, Mute, Unban, Warning +from jarvis_core.db.models.modlog import Action, Modlog, Note +from jarvis_core.db.models.twitter import TwitterAccount, TwitterFollow class RawField(fields.BaseField, ma.fields.Raw): @@ -29,20 +32,6 @@ class Autoreact(Document): 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.""" @@ -60,17 +49,6 @@ class Guess(Document): user = fields.IntegerField(required=True) -@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.""" @@ -84,19 +62,6 @@ class Lock(Document): 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.""" @@ -174,58 +139,3 @@ class Starboard(Document): guild = fields.IntegerField(required=True) admin = fields.IntegerField(required=True) created_at = fields.DateTimeField(default=datetime.utcnow) - - -@JARVIS_INST.register -class TwitterAccount(Document): - """Twitter Account object.""" - - handle = fields.StringField(required=True) - twitter_id = fields.IntegerField(required=True) - last_tweet = fields.IntegerField(required=True) - last_sync = fields.DateTimeField(default=datetime.utcnow) - - class Meta: - collection_name = "twitteraccount" - - -@JARVIS_INST.register -class TwitterFollow(Document): - """Twitter Follow object.""" - - active = fields.BooleanField(default=True) - twitter_id = fields.IntegerField(required=True) - channel = fields.IntegerField(required=True) - guild = fields.IntegerField(required=True) - retweets = fields.BooleanField(default=True) - admin = fields.IntegerField(required=True) - created_at = fields.DateTimeField(default=datetime.utcnow) - - class Meta: - collection_name = "twitterfollow" - - -@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) diff --git a/jarvis_core/db/models/actions.py b/jarvis_core/db/models/actions.py new file mode 100644 index 0000000..f5aa351 --- /dev/null +++ b/jarvis_core/db/models/actions.py @@ -0,0 +1,70 @@ +"""User action models.""" +from datetime import datetime + +from umongo import Document, fields + +from jarvis_core.db import JARVIS_INST + + +@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 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 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 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) diff --git a/jarvis_core/db/models/modlog.py b/jarvis_core/db/models/modlog.py new file mode 100644 index 0000000..1592a98 --- /dev/null +++ b/jarvis_core/db/models/modlog.py @@ -0,0 +1,37 @@ +"""Modlog database models.""" +from datetime import datetime +from typing import List + +from bson import ObjectId +from umongo import Document, EmbeddedDocument, fields + +from jarvis_core.db import JARVIS_INST + + +@JARVIS_INST.register +class Action(EmbeddedDocument): + """Modlog embedded action document.""" + + action_type: str = fields.StringField(required=True) + parent: ObjectId = fields.ObjectIdField(required=True) + + +@JARVIS_INST.register +class Note(EmbeddedDocument): + """Modlog embedded note document.""" + + admin: int = fields.IntegerField(required=True) + content: str = fields.StrField(required=True) + created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + + +@JARVIS_INST.register +class Modlog(Document): + """Modlog database object.""" + + user: int = fields.IntegerField(required=True) + admin: int = fields.IntegerField(required=True) + actions: List[Action] = fields.ListField(fields.EmbeddedField(Action), factory=list) + open: bool = fields.BoolField(default=True) + created_at: datetime = fields.DateTimeField(default=datetime.utcnow) + notes: List[Note] = fields.ListField(fields.EmbeddedField(Note), factory=list) diff --git a/jarvis_core/db/models/twitter.py b/jarvis_core/db/models/twitter.py new file mode 100644 index 0000000..68958b6 --- /dev/null +++ b/jarvis_core/db/models/twitter.py @@ -0,0 +1,35 @@ +"""Twitter database models.""" +from datetime import datetime + +from umongo import Document, fields + +from jarvis_core.db import JARVIS_INST + + +@JARVIS_INST.register +class TwitterAccount(Document): + """Twitter Account object.""" + + handle = fields.StringField(required=True) + twitter_id = fields.IntegerField(required=True) + last_tweet = fields.IntegerField(required=True) + last_sync = fields.DateTimeField(default=datetime.utcnow) + + class Meta: + collection_name = "twitteraccount" + + +@JARVIS_INST.register +class TwitterFollow(Document): + """Twitter Follow object.""" + + active = fields.BooleanField(default=True) + twitter_id = fields.IntegerField(required=True) + channel = fields.IntegerField(required=True) + guild = fields.IntegerField(required=True) + retweets = fields.BooleanField(default=True) + admin = fields.IntegerField(required=True) + created_at = fields.DateTimeField(default=datetime.utcnow) + + class Meta: + collection_name = "twitterfollow" diff --git a/pyproject.toml b/pyproject.toml index f2ec084..f398e05 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "jarvis-core" -version = "0.5.0" +version = "0.6.0" description = "" authors = ["Your Name "]