feat: Add VoteMod, ref jarvis-bot#178
This commit is contained in:
parent
2521b7d6c9
commit
515cf96208
2 changed files with 303 additions and 270 deletions
|
@ -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,
|
||||
]
|
||||
|
|
26
jarvis_core/db/models/votemod.py
Normal file
26
jarvis_core/db/models/votemod.py
Normal 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]
|
Loading…
Add table
Reference in a new issue