2022-11-15 09:19:08 +00:00
|
|
|
import time
|
2024-02-15 13:17:23 +00:00
|
|
|
from typing import Optional, TYPE_CHECKING
|
2022-11-15 09:19:08 +00:00
|
|
|
|
2024-02-15 13:17:23 +00:00
|
|
|
from sqlalchemy import ForeignKey
|
|
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
2022-11-15 09:19:08 +00:00
|
|
|
from sqlalchemy.sql.sqltypes import *
|
|
|
|
|
|
|
|
from files.classes import Base
|
2023-03-12 13:02:31 +00:00
|
|
|
from files.helpers.config.const import *
|
2022-05-04 23:09:46 +00:00
|
|
|
from files.helpers.lazy import lazy
|
2024-02-15 21:50:18 +00:00
|
|
|
from files.helpers.types import int_pk, user_id_fk_pk
|
2022-05-04 23:09:46 +00:00
|
|
|
|
2024-02-15 13:17:23 +00:00
|
|
|
if TYPE_CHECKING:
|
|
|
|
from files.classes import User
|
|
|
|
|
|
|
|
|
2022-05-04 23:09:46 +00:00
|
|
|
class BadgeDef(Base):
|
|
|
|
__tablename__ = "badge_defs"
|
|
|
|
|
2024-02-15 21:50:18 +00:00
|
|
|
id: Mapped[int_pk] = mapped_column(autoincrement=True)
|
2024-02-15 13:17:23 +00:00
|
|
|
name: Mapped[str]
|
2024-02-15 13:17:23 +00:00
|
|
|
description: Mapped[Optional[str]]
|
2024-02-15 13:17:23 +00:00
|
|
|
created_utc: Mapped[int]
|
2022-09-19 20:40:33 +00:00
|
|
|
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
if "created_utc" not in kwargs: kwargs["created_utc"] = int(time.time())
|
|
|
|
super().__init__(*args, **kwargs)
|
2022-05-04 23:09:46 +00:00
|
|
|
|
|
|
|
def __repr__(self):
|
2022-11-29 21:02:38 +00:00
|
|
|
return f"<{self.__class__.__name__}(id={self.id})>"
|
2022-05-04 23:09:46 +00:00
|
|
|
|
2022-08-25 17:29:31 +00:00
|
|
|
@property
|
|
|
|
@lazy
|
|
|
|
def path(self):
|
2023-08-01 07:44:35 +00:00
|
|
|
return f"{SITE_FULL_IMAGES}/i/{SITE_NAME}/badges/{self.id}.webp?b=11"
|
2022-05-04 23:09:46 +00:00
|
|
|
|
|
|
|
class Badge(Base):
|
|
|
|
|
|
|
|
__tablename__ = "badges"
|
|
|
|
|
2024-02-15 21:50:18 +00:00
|
|
|
user_id: Mapped[user_id_fk_pk]
|
2024-02-15 13:17:23 +00:00
|
|
|
badge_id: Mapped[int] = mapped_column(ForeignKey('badge_defs.id'), primary_key=True)
|
2024-02-15 13:17:23 +00:00
|
|
|
description: Mapped[Optional[str]]
|
|
|
|
url: Mapped[Optional[str]]
|
2024-02-15 13:17:23 +00:00
|
|
|
created_utc: Mapped[int]
|
2022-05-04 23:09:46 +00:00
|
|
|
|
2024-02-15 13:17:23 +00:00
|
|
|
user: Mapped["User"] = relationship(back_populates="badges")
|
|
|
|
badge: Mapped["BadgeDef"] = relationship(primaryjoin="Badge.badge_id == BadgeDef.id", lazy="joined", innerjoin=True)
|
2022-05-04 23:09:46 +00:00
|
|
|
|
2022-09-19 20:40:33 +00:00
|
|
|
def __init__(self, *args, **kwargs):
|
|
|
|
if "created_utc" not in kwargs:
|
|
|
|
kwargs["created_utc"] = int(time.time())
|
|
|
|
super().__init__(*args, **kwargs)
|
|
|
|
|
2022-05-04 23:09:46 +00:00
|
|
|
def __repr__(self):
|
2022-11-29 21:02:38 +00:00
|
|
|
return f"<{self.__class__.__name__}(user_id={self.user_id}, badge_id={self.badge_id})>"
|
2022-05-04 23:09:46 +00:00
|
|
|
|
2022-07-09 08:35:47 +00:00
|
|
|
@property
|
|
|
|
@lazy
|
|
|
|
def until(self):
|
2023-06-23 11:07:47 +00:00
|
|
|
if self.badge_id == 58 and self.user.chud != 1: return self.user.chud
|
2023-07-07 21:08:17 +00:00
|
|
|
if self.badge_id == 94 and self.user.progressivestack != 1: return self.user.progressivestack
|
2022-09-13 18:02:08 +00:00
|
|
|
if self.badge_id == 170 and self.user.marsify != 1: return self.user.marsify
|
2023-07-07 21:08:17 +00:00
|
|
|
if self.badge_id == 179 and self.user.spider != 1: return self.user.spider
|
2023-08-01 07:38:58 +00:00
|
|
|
|
2022-07-09 08:35:47 +00:00
|
|
|
if self.badge_id == 95: return self.user.bird
|
|
|
|
if self.badge_id == 96: return self.user.flairchanged
|
|
|
|
if self.badge_id == 97: return self.user.longpost
|
2023-10-13 19:04:45 +00:00
|
|
|
if self.badge_id == 98: return self.user.hieroglyphs
|
2022-07-09 08:35:47 +00:00
|
|
|
if self.badge_id == 109: return self.user.rehab
|
2022-09-07 03:31:55 +00:00
|
|
|
if self.badge_id == 167: return self.user.owoify
|
|
|
|
if self.badge_id == 168: return self.user.bite
|
|
|
|
if self.badge_id == 169: return self.user.earlylife
|
|
|
|
if self.badge_id == 171: return self.user.rainbow
|
2023-05-16 00:20:55 +00:00
|
|
|
if self.badge_id == 281: return self.user.namechanged
|
2023-06-22 06:26:06 +00:00
|
|
|
if self.badge_id == 285: return self.user.queen
|
2023-08-31 14:36:07 +00:00
|
|
|
if self.badge_id == 289: return self.user.sharpen
|
2022-09-07 03:31:55 +00:00
|
|
|
|
2022-07-09 08:35:47 +00:00
|
|
|
return None
|
|
|
|
|
2022-05-04 23:09:46 +00:00
|
|
|
@property
|
|
|
|
@lazy
|
|
|
|
def text(self):
|
2022-09-12 11:51:56 +00:00
|
|
|
if self.until:
|
2022-07-09 08:35:47 +00:00
|
|
|
text = self.badge.description + " until"
|
2023-07-07 21:08:17 +00:00
|
|
|
elif self.badge_id in {58, 94, 170, 179}:
|
2022-09-12 11:51:56 +00:00
|
|
|
text = self.badge.description + " permanently"
|
2022-07-09 08:35:47 +00:00
|
|
|
elif self.description:
|
|
|
|
text = self.description
|
|
|
|
elif self.badge.description:
|
|
|
|
text = self.badge.description
|
|
|
|
else:
|
|
|
|
return self.name
|
2023-01-01 11:36:20 +00:00
|
|
|
|
2022-05-04 23:09:46 +00:00
|
|
|
return f'{self.name} - {text}'
|
|
|
|
|
|
|
|
@property
|
|
|
|
@lazy
|
|
|
|
def name(self):
|
|
|
|
return self.badge.name
|
|
|
|
|
|
|
|
@property
|
|
|
|
@lazy
|
|
|
|
def path(self):
|
2022-08-25 17:29:31 +00:00
|
|
|
return self.badge.path
|
2022-05-04 23:09:46 +00:00
|
|
|
|
|
|
|
@property
|
|
|
|
@lazy
|
|
|
|
def json(self):
|
|
|
|
return {'text': self.text,
|
|
|
|
'name': self.name,
|
|
|
|
'url': self.url,
|
|
|
|
'icon_url':self.path
|
|
|
|
}
|