···2424 return (user, created)
252526262727+def get_or_create_from_interactivity(
2828+ interactivity_payload: dict, session: Session
2929+) -> tuple["User", bool]:
3030+ """Gets or create the user from the given command."""
3131+ query = select(User).filter(
3232+ User.slack_user_id == interactivity_payload["user"]["id"]
3333+ )
3434+ user = session.exec(query).one_or_none()
3535+ created = not user
3636+ if not user:
3737+ user = User(
3838+ slack_user_id=interactivity_payload["user"]["id"],
3939+ slack_username=interactivity_payload["user"]["username"],
4040+ )
4141+ else:
4242+ # Updates the slack username
4343+ user.slack_username = interactivity_payload["user"]["username"]
4444+ session.add(user)
4545+ return (user, created)
4646+4747+2748def available_balance(user: User, session: Session) -> int:
2849 """Obtains the available balance of the user, that means the balance not spend from
2950 the monthly received.