mirror of
https://github.com/MelisaDev/melisa.git
synced 2024-09-23 03:32:01 +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
|
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")
|
T = TypeVar("T")
|
||||||
|
|
||||||
Coro = TypeVar("Coro", bound=Callable[..., Coroutine[Any, Any, Any]])
|
Coro = TypeVar("Coro", bound=Callable[..., Coroutine[Any, Any, Any]])
|
||||||
|
|
||||||
APINullable = Union[T, None]
|
APINullable = Union[T, None]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue