class Card(db.Model): __tablename__ = 'card' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) set_id = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) power_id = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) element = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'s'::bpchar")) color = db.Column(db.CHAR(1), nullable=False, server_default=db.text("'b'::bpchar")) value = db.Column(db.SmallInteger, nullable=False, server_default=db.text("2")) description = db.Column(db.String(255), nullable=False, server_default=db.text("''::character varying")) def get_string(self): return f'{self.id}|{self.element}|{self.value}|{self.color}|{self.power_id}'
class ActivationKey(db.Model): __tablename__ = 'activation_key' penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), primary_key=True, nullable=False) activation_key = db.Column(db.CHAR(255), primary_key=True, nullable=False)
class Login(db.Model): __tablename__ = 'login' id = db.Column( db.Integer, primary_key=True, server_default=db.text("nextval('\"login_id_seq\"'::regclass)")) penguin_id = db.Column(db.ForeignKey('penguin.id', ondelete='CASCADE', onupdate='CASCADE'), nullable=False) date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) ip_hash = db.Column(db.CHAR(255), nullable=False) minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0"))
class Penguin(db.Model): __tablename__ = 'penguin' id = db.Column( db.Integer, primary_key=True, server_default=db.text("nextval('\"penguin_id_seq\"'::regclass)")) username = db.Column(db.String(12), nullable=False, unique=True) nickname = db.Column(db.String(30), nullable=False) password = db.Column(db.CHAR(60), nullable=False) email = db.Column(db.String(255), nullable=False, index=True) registration_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) active = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) safe_chat = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) last_paycheck = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0")) moderator = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) stealth_moderator = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) character = db.Column( db.ForeignKey('character.id', ondelete='CASCADE', onupdate='CASCADE')) igloo = db.Column( db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE')) coins = db.Column(db.Integer, nullable=False, server_default=db.text("500")) color = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) head = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) face = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) neck = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) body = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) hand = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) feet = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) photo = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) flag = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) permaban = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) book_modified = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) book_color = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_highlight = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_pattern = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) book_icon = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) agent_status = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) field_op_status = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) career_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) agent_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) last_field_op = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) com_message_read_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) water_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) water_ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0")) fire_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0")) water_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0")) rainbow_adoptability = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) has_dug = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) puffle_handler = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) nuggets = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) walking = db.Column( db.ForeignKey('penguin_puffle.id', ondelete='CASCADE', onupdate='CASCADE')) opened_playercard = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) special_wave = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) special_dance = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) special_snowball = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) map_category = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) status_field = db.Column(db.Integer, nullable=False, server_default=db.text("0")) timer_active = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) timer_start = db.Column( db.Time, nullable=False, server_default=db.text("'00:00:00'::time without time zone")) timer_end = db.Column( db.Time, nullable=False, server_default=db.text("'23:59:59'::time without time zone")) timer_total = db.Column(db.Interval, nullable=False, server_default=db.text("'01:00:00'::interval")) grounded = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_en = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_pt = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_fr = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_es = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_de = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_ru = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_en = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_pt = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_fr = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_es = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_de = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_ru = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) def __init__(self, *args, **kwargs): self.inventory = None self.permissions = None self.attributes = None self.igloos = None self.igloo_rooms = None self.furniture = None self.flooring = None self.locations = None self.stamps = None self.cards = None self.puffles = None self.puffle_items = None self.buddies = None self.buddy_requests = None self.character_buddies = None self.ignore = None super().__init__(*args, **kwargs) @lru_cache() def safe_nickname(self, language_bitmask): return self.nickname if self.approval & language_bitmask else "P" + str( self.id) async def status_field_set(self, field_bitmask): if (self.status_field & field_bitmask) == 0: await self.update(status_field=self.status_field ^ field_bitmask ).apply() def status_field_get(self, field_bitmask): return (self.status_field & field_bitmask) != 0 @property @lru_cache() def age(self): return (datetime.now() - self.registration_date).days @property @lru_cache() def approval(self): return int( f'{self.approval_ru * 1}{self.approval_de * 1}0{self.approval_es * 1}' f'{self.approval_fr * 1}{self.approval_pt * 1}{self.approval_en * 1}', 2) @property @lru_cache() def rejection(self): return int( f'{self.rejection_ru * 1}{self.rejection_de * 1}0{self.rejection_es * 1}' f'{self.rejection_fr * 1}{self.rejection_pt * 1}{self.rejection_en * 1}', 2)
class Penguin(db.Model): __tablename__ = 'penguin' id = db.Column( db.Integer, primary_key=True, server_default=db.text("nextval('\"penguin_id_seq\"'::regclass)")) username = db.Column(db.String(12), nullable=False, unique=True) nickname = db.Column(db.String(30), nullable=False) password = db.Column(db.CHAR(60), nullable=False) email = db.Column(db.String(255), nullable=False, index=True) registration_date = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) active = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) safe_chat = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) last_paycheck = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) minutes_played = db.Column(db.Integer, nullable=False, server_default=db.text("0")) moderator = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) stealth_moderator = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) character = db.Column( db.ForeignKey('character.id', ondelete='CASCADE', onupdate='CASCADE')) igloo = db.Column( db.ForeignKey('penguin_igloo_room.id', ondelete='CASCADE', onupdate='CASCADE')) coins = db.Column(db.Integer, nullable=False, server_default=db.text("500")) color = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) head = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) face = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) neck = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) body = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) hand = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) feet = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) photo = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) flag = db.Column( db.ForeignKey('item.id', ondelete='CASCADE', onupdate='CASCADE')) permaban = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) book_modified = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) book_color = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_highlight = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) book_pattern = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) book_icon = db.Column(db.SmallInteger, nullable=False, server_default=db.text("1")) agent_status = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) field_op_status = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) career_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) agent_medals = db.Column(db.Integer, nullable=False, server_default=db.text("0")) last_field_op = db.Column(db.DateTime, nullable=False, server_default=db.text("now()")) ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) fire_ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) water_ninja_rank = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) water_ninja_progress = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) ninja_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0")) fire_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0")) water_matches_won = db.Column(db.Integer, nullable=False, server_default=db.text("0")) rainbow_adoptability = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) has_dug = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) nuggets = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) opened_playercard = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) special_wave = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) special_dance = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) special_snowball = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) map_category = db.Column(db.SmallInteger, nullable=False, server_default=db.text("0")) status_field = db.Column(db.Integer, nullable=False, server_default=db.text("0")) timer_active = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) timer_start = db.Column( db.Time, nullable=False, server_default=db.text("'00:00:00'::time without time zone")) timer_end = db.Column( db.Time, nullable=False, server_default=db.text("'23:59:59'::time without time zone")) timer_total = db.Column(db.Interval, nullable=False, server_default=db.text("'01:00:00'::interval")) grounded = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_en = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_pt = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_fr = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_es = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_de = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) approval_ru = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_en = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_pt = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_fr = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_es = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_de = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) rejection_ru = db.Column(db.Boolean, nullable=False, server_default=db.text("false")) def __init__(self, *args, **kwargs): self.inventory = None self.permissions = None self.igloos = None self.furniture = None self.flooring = None self.locations = None self.stamps = None self.cards = None self.puffles = None self.puffle_items = None self.buddies = None self.buddy_requests = None self.character_buddies = None self.ignore = None super().__init__(*args, **kwargs) async def load_inventories(self): self.inventory = await ItemCrumbsCollection.get_collection(self.id) self.permissions = await PermissionCrumbsCollection.get_collection( self.id) self.igloos = await IglooCrumbsCollection.get_collection(self.id) self.furniture = await FurnitureCrumbsCollection.get_collection(self.id ) self.flooring = await FlooringCrumbsCollection.get_collection(self.id) self.locations = await LocationCrumbsCollection.get_collection(self.id) self.stamps = await StampCrumbsCollection.get_collection(self.id) self.cards = await CardCrumbsCollection.get_collection(self.id) self.puffles = await PuffleCrumbsCollection.get_collection(self.id) self.puffle_items = await PuffleItemCrumbsCollection.get_collection( self.id) self.buddies = await BuddyListCollection.get_collection(self.id) self.buddy_requests = await BuddyRequestCollection.get_collection( self.id) self.character_buddies = await CharacterBuddyCollection.get_collection( self.id) self.ignore = await IgnoreListCollection.get_collection(self.id) def safe_nickname(self, language_bitmask): return self.nickname if self.approval & language_bitmask else "P" + str( self.id) @property def minutes_played_today(self): async def get_minutes(): yesterday = datetime.combine(date.today(), datetime.min.time()) minutes_played_today = await db.select([db.func.sum(Login.minutes_played)]) \ .where((Login.penguin_id == self.id) & (Login.date > yesterday)).gino.scalar() return minutes_played_today or 0 return get_minutes() @property def age(self): return (datetime.now() - self.registration_date).days @property def approval(self): return int( '{}{}0{}{}{}{}'.format(self.approval_ru * 1, self.approval_de * 1, self.approval_es * 1, self.approval_fr * 1, self.approval_pt * 1, self.approval_en * 1), 2) @property def rejection(self): return int( '{}{}0{}{}{}{}'.format(self.rejection_ru * 1, self.rejection_de * 1, self.rejection_es * 1, self.rejection_fr * 1, self.rejection_pt * 1, self.rejection_en * 1), 2)