One_Piece_Bounty_Bot / src /model /DevilFruit.py
github-actions[bot]
Automated sync from GitHub
71e71e8
Raw
History Blame Contribute Delete
3.06 kB
import datetime
from typing import Optional
from peewee import *
from src.model.BaseModel import BaseModel
from src.model.GroupChat import GroupChat
from src.model.User import User
from src.model.enums.devil_fruit.DevilFruitCategory import DevilFruitCategory
from src.model.enums.devil_fruit.DevilFruitStatus import DevilFruitStatus
from src.model.enums.devil_fruit.DevilFruitTradeStatus import DevilFruitTradeStatus
class DevilFruit(BaseModel):
"""
DevilFruit class
"""
category: int | DevilFruitCategory = SmallIntegerField()
name: str | CharField = CharField(max_length=50)
model: str | CharField = CharField(max_length=50, null=True, unique=True)
status: DevilFruitTradeStatus | SmallIntegerField = SmallIntegerField(
default=DevilFruitStatus.NEW
)
owner: User | ForeignKeyField = ForeignKeyField(
User, null=True, backref="devil_fruit_owners", on_delete="RESTRICT", on_update="CASCADE"
)
collection_date: datetime.datetime | DateTimeField = DateTimeField(null=True)
eaten_date: datetime.datetime | DateTimeField = DateTimeField(null=True)
expiration_date: datetime.datetime | DateTimeField = DateTimeField(null=True)
release_group_chat: GroupChat | ForeignKeyField = ForeignKeyField(
GroupChat,
null=True,
backref="devil_fruit_release_groups_chats",
on_delete="RESTRICT",
on_update="CASCADE",
)
release_date = DateTimeField(null=True)
release_message_id = IntegerField(null=True)
should_show_abilities = BooleanField(default=False)
is_defective = BooleanField(default=False)
class Meta:
db_table = "devil_fruit"
def get_full_name(self) -> str:
"""
Get fruit full name
:return: Fruit full name
"""
if self.model:
return f"{self.name}, Model: {self.model}"
if self.get_category() is DevilFruitCategory.SMILE:
return f"{self.name} SMILE"
return str(self.name)
@staticmethod
def get_by_owner_if_eaten(user: User) -> Optional["DevilFruit"]:
"""
Get the devil fruit eaten by the user
:param user: The user
:return: The devil fruit
"""
return DevilFruit.get_or_none(
DevilFruit.owner == user, DevilFruit.status == DevilFruitStatus.EATEN
)
def get_average_price(self) -> int:
"""
Get the average price of the sold fruits of the same category
:return: The average price
"""
from src.model.DevilFruitTrade import DevilFruitTrade
return DevilFruitTrade.get_average_price(self.category)
def get_category(self) -> DevilFruitCategory:
"""
Get the category of the devil fruit
:return: The category
"""
return DevilFruitCategory(self.category)
def get_status(self) -> DevilFruitStatus:
"""
Get the status of the devil fruit
:return: The status
"""
return DevilFruitStatus(self.status)
DevilFruit.create_table()