feat: Add VoteMod, ref jarvis-bot#178

This commit is contained in:
Zeva Rose 2023-05-10 22:26:58 +00:00
parent 2521b7d6c9
commit 515cf96208
2 changed files with 303 additions and 270 deletions

View file

@ -1,270 +1,277 @@
"""JARVIS database models.""" """JARVIS database models."""
from datetime import datetime from datetime import datetime
from typing import Optional from typing import Optional
from beanie import Document, Link from beanie import Document, Link
from pydantic import BaseModel, Field from pydantic import BaseModel, Field
from jarvis_core.db.models.actions import Ban, Kick, Mute, Unban, Warning 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.modlog import Action, Modlog, Note
from jarvis_core.db.models.reddit import Subreddit, SubredditFollow from jarvis_core.db.models.reddit import Subreddit, SubredditFollow
from jarvis_core.db.models.twitter import TwitterAccount, TwitterFollow from jarvis_core.db.models.twitter import TwitterAccount, TwitterFollow
from jarvis_core.db.utils import NowField from jarvis_core.db.models.votemod import Karma, Vote, VoteMod
from jarvis_core.db.utils import NowField
__all__ = [
"Action", __all__ = [
"Autopurge", "Action",
"Autoreact", "Autopurge",
"Ban", "Autoreact",
"Config", "Ban",
"Filter", "Config",
"Guess", "Filter",
"Kick", "Guess",
"Lock", "Kick",
"Lockdown", "Lock",
"Modlog", "Lockdown",
"Mute", "Modlog",
"Note", "Mute",
"Pin", "Note",
"Pinboard", "Pin",
"Purge", "Pinboard",
"Reminder", "Purge",
"Rolegiver", "Reminder",
"Bypass", "Rolegiver",
"Roleping", "Bypass",
"Setting", "Roleping",
"Subreddit", "Setting",
"SubredditFollow", "Subreddit",
"Tag", "SubredditFollow",
"Temprole", "Tag",
"TwitterAccount", "Temprole",
"TwitterFollow", "TwitterAccount",
"Unban", "TwitterFollow",
"UserSetting", "Unban",
"Warning", "UserSetting",
"all_models", "Warning",
] "Karma",
"Vote",
"VoteMod",
class Autopurge(Document): "all_models",
guild: int ]
channel: int
delay: int = 30
admin: int class Autopurge(Document):
created_at: datetime = NowField() guild: int
channel: int
delay: int = 30
class Autoreact(Document): admin: int
guild: int created_at: datetime = NowField()
channel: int
reactions: list[str] = Field(default_factory=list)
admin: int class Autoreact(Document):
thread: bool guild: int
created_at: datetime = NowField() channel: int
reactions: list[str] = Field(default_factory=list)
admin: int
class Config(Document): thread: bool
"""Config database object.""" created_at: datetime = NowField()
key: str
value: str | int | bool class Config(Document):
"""Config database object."""
class Filter(Document): key: str
"""Filter database object.""" value: str | int | bool
guild: int
name: str class Filter(Document):
filters: list[str] = Field(default_factory=list) """Filter database object."""
guild: int
class Guess(Document): name: str
"""Guess database object.""" filters: list[str] = Field(default_factory=list)
correct: bool
guess: str class Guess(Document):
user: int """Guess database object."""
correct: bool
class Permission(BaseModel): guess: str
"""Embedded Permissions document.""" user: int
id: int
allow: int = 0 class Permission(BaseModel):
deny: int = 0 """Embedded Permissions document."""
id: int
class Lock(Document): allow: int = 0
"""Lock database object.""" deny: int = 0
active: bool = True
admin: int class Lock(Document):
channel: int """Lock database object."""
duration: int = 10
reason: str active: bool = True
original_perms: Permission admin: int
created_at: datetime = NowField() channel: int
duration: int = 10
reason: str
class Lockdown(Document): original_perms: Permission
"""Lockdown database object.""" created_at: datetime = NowField()
active: bool = True
admin: int class Lockdown(Document):
duration: int = 10 """Lockdown database object."""
guild: int
reason: str active: bool = True
original_perms: int admin: int
created_at: datetime = NowField() duration: int = 10
guild: int
reason: str
class Purge(Document): original_perms: int
"""Purge database object.""" created_at: datetime = NowField()
admin: int
channel: int class Purge(Document):
guild: int """Purge database object."""
count_: int = Field(10, alias="count")
created_at: datetime = NowField() admin: int
channel: int
guild: int
class Reminder(Document): count_: int = Field(10, alias="count")
"""Reminder database object.""" created_at: datetime = NowField()
active: bool = True
user: int class Reminder(Document):
guild: int """Reminder database object."""
channel: int
message: str active: bool = True
remind_at: datetime user: int
created_at: datetime = NowField() guild: int
private: bool = False channel: int
message: str
remind_at: datetime
class Rolegiver(Document): created_at: datetime = NowField()
"""Rolegiver database object.""" private: bool = False
guild: int
roles: list[int] class Rolegiver(Document):
"""Rolegiver database object."""
class Bypass(BaseModel): guild: int
"""Roleping bypass embedded object.""" roles: list[int]
users: list[int]
roles: list[int] class Bypass(BaseModel):
"""Roleping bypass embedded object."""
class Roleping(Document): users: list[int]
"""Roleping database object.""" roles: list[int]
active: bool = True
role: int class Roleping(Document):
guild: int """Roleping database object."""
admin: int
bypass: Bypass active: bool = True
created_at: datetime = NowField() role: int
guild: int
admin: int
class Setting(Document): bypass: Bypass
"""Setting database object.""" created_at: datetime = NowField()
guild: int
setting: str class Setting(Document):
value: str | int | bool | list[int | str] """Setting database object."""
guild: int
class Phishlist(Document): setting: str
"""Phishlist database object.""" value: str | int | bool | list[int | str]
url: str
confirmed: bool = False class Phishlist(Document):
valid: bool = True """Phishlist database object."""
created_at: datetime = NowField()
url: str
confirmed: bool = False
class Pinboard(Document): valid: bool = True
"""Pinboard database object.""" created_at: datetime = NowField()
channel: int
guild: int class Pinboard(Document):
admin: int """Pinboard database object."""
created_at: datetime = NowField()
channel: int
guild: int
class Pin(Document): admin: int
"""Pin database object.""" created_at: datetime = NowField()
active: bool = True
index: int class Pin(Document):
message: int """Pin database object."""
channel: int
pinboard: Link[Pinboard] active: bool = True
guild: int index: int
admin: int message: int
pin: int channel: int
created_at: datetime = NowField() pinboard: Link[Pinboard]
guild: int
admin: int
class Tag(Document): pin: int
"""Tag database object.""" created_at: datetime = NowField()
creator: int
name: str class Tag(Document):
content: str """Tag database object."""
guild: int
created_at: datetime = NowField() creator: int
edited_at: Optional[datetime] = None name: str
editor: Optional[int] = None content: str
guild: int
created_at: datetime = NowField()
class Temprole(Document): edited_at: Optional[datetime] = None
"""Temporary role object.""" editor: Optional[int] = None
guild: int
user: int class Temprole(Document):
role: int """Temporary role object."""
admin: int
expires_at: datetime guild: int
reapply_on_rejoin: bool = True user: int
created_at: datetime = NowField() role: int
admin: int
expires_at: datetime
class UserSetting(Document): reapply_on_rejoin: bool = True
"""User Setting object.""" created_at: datetime = NowField()
user: int
type: str class UserSetting(Document):
setting: str """User Setting object."""
value: str | int | bool
user: int
type: str
all_models = [ setting: str
Autopurge, value: str | int | bool
Autoreact,
Ban,
Config, all_models = [
Filter, Autopurge,
Guess, Autoreact,
Kick, Ban,
Lock, Config,
Lockdown, Filter,
Modlog, Guess,
Mute, Karma,
Pin, Kick,
Pinboard, Lock,
Purge, Lockdown,
Reminder, Modlog,
Rolegiver, Mute,
Roleping, Pin,
Setting, Pinboard,
Subreddit, Purge,
SubredditFollow, Reminder,
Tag, Rolegiver,
Temprole, Roleping,
TwitterAccount, Setting,
TwitterFollow, Subreddit,
Unban, SubredditFollow,
UserSetting, Tag,
Warning, Temprole,
] TwitterAccount,
TwitterFollow,
Unban,
UserSetting,
Vote,
VoteMod,
Warning,
]

View file

@ -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]