mirror of
https://github.com/MelisaDev/melisa.git
synced 2024-11-11 19:07:28 +03:00
add structure user
This commit is contained in:
parent
5b06b80046
commit
62801cc8ac
2 changed files with 197 additions and 4 deletions
179
melisa/models/user/user.py
Normal file
179
melisa/models/user/user.py
Normal file
|
@ -0,0 +1,179 @@
|
|||
from __future__ import annotations
|
||||
|
||||
from enum import IntEnum
|
||||
from dataclasses import dataclass
|
||||
|
||||
from ...utils.api_object import APIObjectBase
|
||||
from ...utils.snowflake import Snowflake
|
||||
from ...utils.types import MISSING
|
||||
from ...utils.types import APINullable
|
||||
|
||||
|
||||
class PremiumTypes(IntEnum):
|
||||
"""Premium types denote the level of premium a user has.
|
||||
|
||||
Attributes
|
||||
----------
|
||||
NITRO:
|
||||
Full nitro
|
||||
NITRO_CLASSIC:
|
||||
Nitro (not boost)
|
||||
NONE:
|
||||
There is no subscription Discord Nitro(Full or classic)
|
||||
"""
|
||||
|
||||
NONE = 0
|
||||
NITRO_CLASSIC = 1
|
||||
NITRO = 2
|
||||
|
||||
|
||||
class UserFlags(IntEnum):
|
||||
"""Profile Icons
|
||||
|
||||
Attributes
|
||||
----------
|
||||
NONE:
|
||||
None
|
||||
STAFF:
|
||||
Discord Employee
|
||||
PARTNER:
|
||||
Partnered Server Owner
|
||||
HYPESQUAD:
|
||||
HypeSquad Events Coordinator
|
||||
BUG_HUNTER_LEVEL_1:
|
||||
Bug Hunter Level 1
|
||||
HYPESQUAD_ONLINE_HOUSE_1:
|
||||
House Bravery Member
|
||||
HYPESQUAD_ONLINE_HOUSE_2:
|
||||
House Brilliance Member
|
||||
HYPESQUAD_ONLINE_HOUSE_3:
|
||||
House Balance Member
|
||||
PREMIUM_EARLY_SUPPORTER:
|
||||
Early Nitro Supporter
|
||||
TEAM_PSEUDO_USER:
|
||||
User is a team
|
||||
BUG_HUNTER_LEVEL_2:
|
||||
Bug Hunter Level 2
|
||||
VERIFIED_BOT:
|
||||
Verified Bot
|
||||
VERIFIED_DEVELOPER:
|
||||
Early Verified Bot Developer
|
||||
CERTIFIED_MODERATOR:
|
||||
Discord Certified Moderator
|
||||
BOT_HTTP_INTERACTIONS:
|
||||
Bot uses only HTTP interactions and is shown in the online member list
|
||||
"""
|
||||
|
||||
NONE = 0
|
||||
STAFF = 1 << 0
|
||||
PARTNER = 1 << 1
|
||||
HYPESQUAD = 1 << 2
|
||||
BUG_HUNTER_LEVEL_1 = 1 << 3
|
||||
HYPESQUAD_ONLINE_HOUSE_1 = 1 << 6
|
||||
HYPESQUAD_ONLINE_HOUSE_2 = 1 << 7
|
||||
HYPESQUAD_ONLINE_HOUSE_3 = 1 << 8
|
||||
PREMIUM_EARLY_SUPPORTER = 1 << 9
|
||||
TEAM_PSEUDO_USER = 1 << 10
|
||||
BUG_HUNTER_LEVEL_2 = 1 << 14
|
||||
VERIFIED_BOT = 1 << 16
|
||||
VERIFIED_DEVELOPER = 1 << 17
|
||||
CERTIFIED_MODERATOR = 1 << 18
|
||||
BOT_HTTP_INTERACTIONS = 1 << 19
|
||||
|
||||
|
||||
class VisibilityTypes(IntEnum):
|
||||
"""The type of connection visibility.
|
||||
|
||||
Attributes
|
||||
----------
|
||||
None:
|
||||
invisible to everyone except the user themselves
|
||||
Everyone:
|
||||
visible to everyone
|
||||
"""
|
||||
|
||||
NONE = 0
|
||||
EVERYONE = 1
|
||||
|
||||
|
||||
@dataclass(repr=False)
|
||||
class User(APIObjectBase):
|
||||
"""User Structure
|
||||
|
||||
Attributes
|
||||
----------
|
||||
id:
|
||||
the user's id
|
||||
username:
|
||||
the user's username, not unique across the platform
|
||||
discriminator:
|
||||
the user's 4-digit discord-tag
|
||||
avatar:
|
||||
the user's avatar hash
|
||||
bot:
|
||||
whether the user belongs to an OAuth2 application
|
||||
system:
|
||||
whether the user is an Official Discord System user (part of the urgent message system)
|
||||
mfa_enabled:
|
||||
whether the user has two factor enabled on their account
|
||||
banner:
|
||||
the user's banner hash
|
||||
accent_color:
|
||||
the user's banner color encoded as an integer representation of hexadecimal color code
|
||||
locale:
|
||||
the user's chosen language option
|
||||
verified:
|
||||
whether the email on this account has been verified
|
||||
email:
|
||||
the user's email
|
||||
flags:
|
||||
the flags on a user's account
|
||||
premium_type:
|
||||
the type of Nitro subscription on a user's account
|
||||
public_flags:
|
||||
the public flags on a user's account
|
||||
"""
|
||||
|
||||
id: APINullable[Snowflake] = MISSING
|
||||
username: APINullable[str] = MISSING
|
||||
discriminator: APINullable[str] = MISSING
|
||||
avatar: APINullable[str] = MISSING
|
||||
bot: APINullable[bool] = MISSING
|
||||
system: APINullable[bool] = MISSING
|
||||
mfa_enabled: APINullable[bool] = MISSING
|
||||
banner: APINullable[str] = MISSING
|
||||
accent_color = APINullable[int] = MISSING
|
||||
local = APINullable[str] = MISSING
|
||||
verified = APINullable[bool] = MISSING
|
||||
email = APINullable[str] = MISSING
|
||||
flags = APINullable[int] = MISSING
|
||||
premium_type = APINullable[int] = MISSING
|
||||
public_flags = APINullable[int] = MISSING
|
||||
|
||||
|
||||
@property
|
||||
def premium(self) -> APINullable[PremiumTypes]:
|
||||
return (
|
||||
MISSING
|
||||
if self.premium_type is MISSING
|
||||
else PremiumTypes(self.premium_type)
|
||||
)
|
||||
|
||||
@property
|
||||
def flags(self) -> APINullable[UserFlags]:
|
||||
return(
|
||||
MISSING
|
||||
if self.flags is MISSING
|
||||
else UserFlags(self.flags)
|
||||
)
|
||||
|
||||
@property
|
||||
def mention(self):
|
||||
return "<@!{}>".format(self.id)
|
||||
|
||||
@property
|
||||
def get_avatar_url(self):
|
||||
return (
|
||||
"https://cdn.discordapp.com/avatars/{}/{}.png".format(self.id, self.avatar),
|
||||
"?size=1024"
|
||||
)
|
|
@ -2,11 +2,25 @@ from __future__ import annotations
|
|||
|
||||
from typing import TypeVar, Callable, Coroutine, Any, Union
|
||||
|
||||
|
||||
class MissingType:
|
||||
|
||||
def __repr__(self):
|
||||
return "<MISSING>"
|
||||
|
||||
def __bool__(self) -> bool:
|
||||
return False
|
||||
|
||||
def __eq__(self, __o: object) -> bool:
|
||||
return __o is MISSING
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash(None)
|
||||
|
||||
MISSING = MissingType()
|
||||
|
||||
T = TypeVar("T")
|
||||
|
||||
Coro = TypeVar("Coro", bound=Callable[..., Coroutine[Any, Any, Any]])
|
||||
|
||||
APINullable = Union[T, None]
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue