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."""
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,
]

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]