From 515cf962083bf5a9c585ec7be96ee1a380e92f71 Mon Sep 17 00:00:00 2001 From: Zevaryx Date: Wed, 10 May 2023 22:26:58 +0000 Subject: [PATCH] feat: Add VoteMod, ref jarvis-bot#178 --- jarvis_core/db/models/__init__.py | 547 +++++++++++++++--------------- jarvis_core/db/models/votemod.py | 26 ++ 2 files changed, 303 insertions(+), 270 deletions(-) create mode 100644 jarvis_core/db/models/votemod.py diff --git a/jarvis_core/db/models/__init__.py b/jarvis_core/db/models/__init__.py index d9347c8..8ddb96d 100644 --- a/jarvis_core/db/models/__init__.py +++ b/jarvis_core/db/models/__init__.py @@ -1,270 +1,277 @@ -"""JARVIS database models.""" -from datetime import datetime -from typing import Optional - -from beanie import Document, Link -from pydantic import BaseModel, Field - -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.reddit import Subreddit, SubredditFollow -from jarvis_core.db.models.twitter import TwitterAccount, TwitterFollow -from jarvis_core.db.utils import NowField - -__all__ = [ - "Action", - "Autopurge", - "Autoreact", - "Ban", - "Config", - "Filter", - "Guess", - "Kick", - "Lock", - "Lockdown", - "Modlog", - "Mute", - "Note", - "Pin", - "Pinboard", - "Purge", - "Reminder", - "Rolegiver", - "Bypass", - "Roleping", - "Setting", - "Subreddit", - "SubredditFollow", - "Tag", - "Temprole", - "TwitterAccount", - "TwitterFollow", - "Unban", - "UserSetting", - "Warning", - "all_models", -] - - -class Autopurge(Document): - guild: int - channel: int - delay: int = 30 - admin: int - created_at: datetime = NowField() - - -class Autoreact(Document): - guild: int - channel: int - reactions: list[str] = Field(default_factory=list) - admin: int - thread: bool - created_at: datetime = NowField() - - -class Config(Document): - """Config database object.""" - - key: str - value: str | int | bool - - -class Filter(Document): - """Filter database object.""" - - guild: int - name: str - filters: list[str] = Field(default_factory=list) - - -class Guess(Document): - """Guess database object.""" - - correct: bool - guess: str - user: int - - -class Permission(BaseModel): - """Embedded Permissions document.""" - - id: int - allow: int = 0 - deny: int = 0 - - -class Lock(Document): - """Lock database object.""" - - active: bool = True - admin: int - channel: int - duration: int = 10 - reason: str - original_perms: Permission - created_at: datetime = NowField() - - -class Lockdown(Document): - """Lockdown database object.""" - - active: bool = True - admin: int - duration: int = 10 - guild: int - reason: str - original_perms: int - created_at: datetime = NowField() - - -class Purge(Document): - """Purge database object.""" - - admin: int - channel: int - guild: int - count_: int = Field(10, alias="count") - created_at: datetime = NowField() - - -class Reminder(Document): - """Reminder database object.""" - - active: bool = True - user: int - guild: int - channel: int - message: str - remind_at: datetime - created_at: datetime = NowField() - private: bool = False - - -class Rolegiver(Document): - """Rolegiver database object.""" - - guild: int - roles: list[int] - - -class Bypass(BaseModel): - """Roleping bypass embedded object.""" - - users: list[int] - roles: list[int] - - -class Roleping(Document): - """Roleping database object.""" - - active: bool = True - role: int - guild: int - admin: int - bypass: Bypass - created_at: datetime = NowField() - - -class Setting(Document): - """Setting database object.""" - - guild: int - setting: str - value: str | int | bool | list[int | str] - - -class Phishlist(Document): - """Phishlist database object.""" - - url: str - confirmed: bool = False - valid: bool = True - created_at: datetime = NowField() - - -class Pinboard(Document): - """Pinboard database object.""" - - channel: int - guild: int - admin: int - created_at: datetime = NowField() - - -class Pin(Document): - """Pin database object.""" - - active: bool = True - index: int - message: int - channel: int - pinboard: Link[Pinboard] - guild: int - admin: int - pin: int - created_at: datetime = NowField() - - -class Tag(Document): - """Tag database object.""" - - creator: int - name: str - content: str - guild: int - created_at: datetime = NowField() - edited_at: Optional[datetime] = None - editor: Optional[int] = None - - -class Temprole(Document): - """Temporary role object.""" - - guild: int - user: int - role: int - admin: int - expires_at: datetime - reapply_on_rejoin: bool = True - created_at: datetime = NowField() - - -class UserSetting(Document): - """User Setting object.""" - - user: int - type: str - setting: str - value: str | int | bool - - -all_models = [ - Autopurge, - Autoreact, - Ban, - Config, - Filter, - Guess, - Kick, - Lock, - Lockdown, - Modlog, - Mute, - Pin, - Pinboard, - Purge, - Reminder, - Rolegiver, - Roleping, - Setting, - Subreddit, - SubredditFollow, - Tag, - Temprole, - TwitterAccount, - TwitterFollow, - Unban, - UserSetting, - Warning, -] +"""JARVIS database models.""" +from datetime import datetime +from typing import Optional + +from beanie import Document, Link +from pydantic import BaseModel, Field + +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.reddit import Subreddit, SubredditFollow +from jarvis_core.db.models.twitter import TwitterAccount, TwitterFollow +from jarvis_core.db.models.votemod import Karma, Vote, VoteMod +from jarvis_core.db.utils import NowField + +__all__ = [ + "Action", + "Autopurge", + "Autoreact", + "Ban", + "Config", + "Filter", + "Guess", + "Kick", + "Lock", + "Lockdown", + "Modlog", + "Mute", + "Note", + "Pin", + "Pinboard", + "Purge", + "Reminder", + "Rolegiver", + "Bypass", + "Roleping", + "Setting", + "Subreddit", + "SubredditFollow", + "Tag", + "Temprole", + "TwitterAccount", + "TwitterFollow", + "Unban", + "UserSetting", + "Warning", + "Karma", + "Vote", + "VoteMod", + "all_models", +] + + +class Autopurge(Document): + guild: int + channel: int + delay: int = 30 + admin: int + created_at: datetime = NowField() + + +class Autoreact(Document): + guild: int + channel: int + reactions: list[str] = Field(default_factory=list) + admin: int + thread: bool + created_at: datetime = NowField() + + +class Config(Document): + """Config database object.""" + + key: str + value: str | int | bool + + +class Filter(Document): + """Filter database object.""" + + guild: int + name: str + filters: list[str] = Field(default_factory=list) + + +class Guess(Document): + """Guess database object.""" + + correct: bool + guess: str + user: int + + +class Permission(BaseModel): + """Embedded Permissions document.""" + + id: int + allow: int = 0 + deny: int = 0 + + +class Lock(Document): + """Lock database object.""" + + active: bool = True + admin: int + channel: int + duration: int = 10 + reason: str + original_perms: Permission + created_at: datetime = NowField() + + +class Lockdown(Document): + """Lockdown database object.""" + + active: bool = True + admin: int + duration: int = 10 + guild: int + reason: str + original_perms: int + created_at: datetime = NowField() + + +class Purge(Document): + """Purge database object.""" + + admin: int + channel: int + guild: int + count_: int = Field(10, alias="count") + created_at: datetime = NowField() + + +class Reminder(Document): + """Reminder database object.""" + + active: bool = True + user: int + guild: int + channel: int + message: str + remind_at: datetime + created_at: datetime = NowField() + private: bool = False + + +class Rolegiver(Document): + """Rolegiver database object.""" + + guild: int + roles: list[int] + + +class Bypass(BaseModel): + """Roleping bypass embedded object.""" + + users: list[int] + roles: list[int] + + +class Roleping(Document): + """Roleping database object.""" + + active: bool = True + role: int + guild: int + admin: int + bypass: Bypass + created_at: datetime = NowField() + + +class Setting(Document): + """Setting database object.""" + + guild: int + setting: str + value: str | int | bool | list[int | str] + + +class Phishlist(Document): + """Phishlist database object.""" + + url: str + confirmed: bool = False + valid: bool = True + created_at: datetime = NowField() + + +class Pinboard(Document): + """Pinboard database object.""" + + channel: int + guild: int + admin: int + created_at: datetime = NowField() + + +class Pin(Document): + """Pin database object.""" + + active: bool = True + index: int + message: int + channel: int + pinboard: Link[Pinboard] + guild: int + admin: int + pin: int + created_at: datetime = NowField() + + +class Tag(Document): + """Tag database object.""" + + creator: int + name: str + content: str + guild: int + created_at: datetime = NowField() + edited_at: Optional[datetime] = None + editor: Optional[int] = None + + +class Temprole(Document): + """Temporary role object.""" + + guild: int + user: int + role: int + admin: int + expires_at: datetime + reapply_on_rejoin: bool = True + created_at: datetime = NowField() + + +class UserSetting(Document): + """User Setting object.""" + + user: int + type: str + setting: str + value: str | int | bool + + +all_models = [ + Autopurge, + Autoreact, + Ban, + Config, + Filter, + Guess, + Karma, + Kick, + Lock, + Lockdown, + Modlog, + Mute, + Pin, + Pinboard, + Purge, + Reminder, + Rolegiver, + Roleping, + Setting, + Subreddit, + SubredditFollow, + Tag, + Temprole, + TwitterAccount, + TwitterFollow, + Unban, + UserSetting, + Vote, + VoteMod, + Warning, +] diff --git a/jarvis_core/db/models/votemod.py b/jarvis_core/db/models/votemod.py new file mode 100644 index 0000000..df168b5 --- /dev/null +++ b/jarvis_core/db/models/votemod.py @@ -0,0 +1,26 @@ +"""VoteMod models.""" +from typing import Optional + +from beanie import Document +from pydantic import BaseModel + + +class Vote(BaseModel): + user: int + score: int + + +class Karma(Document): + user: int + karma: int = 1 + revoked: bool = False + + +class VoteMod(Document): + initiator: int + target: int + message: int + content: str + attachments: list[str] + score: int + votes: list[Vote] \ No newline at end of file