예제 #1
0
 async def create_message(cls,
                          campaign_id: int,
                          episode_id: int,
                          character_id: int,
                          message_type: MessageType,
                          content: dict,
                          is_gm: bool,
                          created: Optional[int] = None) -> Message:
     url_token = base62.encode(get_id())
     if not created:
         created = int(time.time())
     values = ObjectDict(
         url_token=url_token,
         campaign_id=campaign_id,
         episode_id=episode_id,
         character_id=character_id,
         type=int(message_type),
         is_removed=0,
         is_gm=int(is_gm),
         content=content,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     message = _format_message(values)
     return message
예제 #2
0
 async def create_dice(cls,
                       character_id: int,
                       episode_id: int,
                       dice_type: DiceType,
                       expression: str,
                       detail: str,
                       result: DiceValue_T,
                       reason: Optional[str] = '') -> Dice:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         character_id=character_id,
         episode_id=episode_id,
         type=int(dice_type),
         expression=expression,
         detail=detail,
         reason=reason if reason else '',
         result=result,
         created=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     dice = _format_dice(values)
     return dice
예제 #3
0
 async def create_member(cls, name: str, email: str, passhash: str,
                         headline: str='', avatar: str='') -> Member:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         name=name,
         email=email,
         passhash=passhash,
         headline=headline,
         avatar=avatar,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     member = _format_member(values)
     return member
예제 #4
0
 async def create_combat(cls, room_id: int) -> Combat:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         room_id=room_id,
         state=int(CombatState.INITIATING),
         is_removed=0,
         tokens={},
         order={},
         data={},
         started_at=created,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     combat = _format_combat(values)
     return combat
예제 #5
0
 async def create_character(cls, member_id: int, name: str, avatar: str, description: str,
                            raw_data: dict) -> Character:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         member_id=member_id,
         name=name,
         avatar=avatar,
         description=description,
         is_removed=0,
         data=raw_data,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     character = _format_character(values)
     return character
예제 #6
0
 async def create_episode(cls, room_id: int, campaign_id: int, title: str,
                          state: EpisodeState) -> Episode:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         room_id=room_id,
         campaign_id=campaign_id,
         title=title,
         state=int(state),
         is_removed=0,
         started_at=created,
         ended_at=None,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     episode = _format_episode(values)
     return episode
예제 #7
0
 async def create_campaign(cls, room_id: int, name: str, description: str,
                           owner_id: int) -> Campaign:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         room_id=room_id,
         name=name,
         description=description,
         owner_id=owner_id,
         state=int(CampaignState.PREPARING),
         is_removed=0,
         last_episode_id=0,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     campaign = _format_campaign(values)
     return campaign
예제 #8
0
 async def create_room(cls,
                       name: str,
                       description: str,
                       owner_id: int,
                       avatar: str = '') -> Room:
     created = int(time.time())
     url_token = base62.encode(get_id())
     values = ObjectDict(
         url_token=url_token,
         name=name,
         description=description,
         owner_id=owner_id,
         is_removed=0,
         current_campaign_id=0,
         avatar=avatar,
         created=created,
         updated=created,
     )
     query = cls.t.insert().values(values)
     result = await table.execute(query)
     values.id = result.lastrowid
     room = _format_room(values)
     return room