mirror of
https://github.com/stijndcl/didier.git
synced 2026-04-10 09:05:48 +02:00
Work on rob
This commit is contained in:
parent
d46a31a7be
commit
a21eb51e6d
7 changed files with 203 additions and 8 deletions
|
|
@ -47,6 +47,9 @@ async def invest(session: AsyncSession, user_id: int, amount: Union[str, int]) -
|
|||
if amount == "all":
|
||||
amount = bank.dinks
|
||||
|
||||
if bank.dinks <= 0:
|
||||
return 0
|
||||
|
||||
# Don't allow investing more dinks than you own
|
||||
amount = min(bank.dinks, int(amount))
|
||||
|
||||
|
|
@ -158,11 +161,14 @@ async def upgrade_rob(session: AsyncSession, user_id: int) -> int:
|
|||
async def gamble_dinks(
|
||||
session: AsyncSession, user_id: int, amount: Union[str, int], payout_factor: int, won: bool
|
||||
) -> int:
|
||||
"""Gamble some of your Dinks"""
|
||||
"""Gamble some of your Didier Dinks"""
|
||||
bank = await get_bank(session, user_id)
|
||||
if amount == "all":
|
||||
amount = bank.dinks
|
||||
|
||||
if bank.dinks <= 0:
|
||||
return 0
|
||||
|
||||
amount = min(int(amount), bank.dinks)
|
||||
|
||||
sign = 1 if won else -1
|
||||
|
|
@ -170,3 +176,16 @@ async def gamble_dinks(
|
|||
await add_dinks(session, user_id, sign * amount * factor)
|
||||
|
||||
return amount * factor
|
||||
|
||||
|
||||
async def rob(session: AsyncSession, amount: int, robber_id: int, robbed_id: int):
|
||||
"""Rob another user's Didier Dinks"""
|
||||
robber = await get_bank(session, robber_id)
|
||||
robbed = await get_bank(session, robbed_id)
|
||||
|
||||
robber.dinks += amount
|
||||
robbed.dinks -= amount
|
||||
|
||||
session.add(robber)
|
||||
session.add(robbed)
|
||||
await session.commit()
|
||||
|
|
|
|||
28
database/crud/jail.py
Normal file
28
database/crud/jail.py
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database.schemas import Jail
|
||||
|
||||
__all__ = ["get_jail", "get_user_jail", "imprison"]
|
||||
|
||||
|
||||
async def get_jail(session: AsyncSession) -> list[Jail]:
|
||||
"""Get the entire Didier Jail"""
|
||||
statement = select(Jail)
|
||||
return list((await session.execute(statement)).scalars().all())
|
||||
|
||||
|
||||
async def get_user_jail(session: AsyncSession, user_id: int) -> Optional[Jail]:
|
||||
"""Check how long a given user is still in jail for"""
|
||||
statement = select(Jail).where(Jail.user_id == user_id)
|
||||
return (await session.execute(statement)).scalar_one_or_none()
|
||||
|
||||
|
||||
async def imprison(session: AsyncSession, user_id: int, until: datetime):
|
||||
"""Put a user in Didier Jail"""
|
||||
jail = Jail(user_id=user_id, until=until)
|
||||
session.add(jail)
|
||||
await session.commit()
|
||||
Loading…
Add table
Add a link
Reference in a new issue