Untitled - MARKUP 18.45 KB
                                
                                    #biblioteki
import subprocess
import os
from pygame.constants import BUTTON_MIDDLE
import streamlit as st
from replit import db
import hashlib
import requests
import random
import ast
import datetime

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.pyplot as plt

#funkcje z logowania i menu

def Baza_Czyszczenie():
    st.header("Czy na pewno chcesz wyczyścić bazę danych?")
    if st.button("Czyszczenie bazy danych"):
        for key in db:
            del db[key]




def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()
#logowanie


def logowanie():
  st.header("Logowanie")
  username = st.text_input("Podaj nazwę użytkownika: ")
  password = st.text_input("Podaj hasło: ", type="password")
  if st.button("Zaloguj"):
    Obecny_czas = datetime.date.today()
    st.write(Obecny_czas)
    if username in db:
        user_data = db[username]
        if db[username]["Blokada"] == 0:
            x = db[username]["Data_bana"]
            x = (datetime.datetime.strptime(x, "%Y-%m-%d")).date()
            if x <= Obecny_czas:
                if hash_password(password) == user_data['password']:
                    st.success(f"Zalogowano jako {username}. Aktualne saldo: {user_data['saldo']}")
                    db["zalogowany"] = username  
                    st.session_state.current_user = username
                    st.rerun()
                else:
                  st.error(f"Użytkownik {username} lub hasło jest nieprawidłowe.")
            else:
                st.error(f"Użytkownik {username} jest zablokowany.")
        else:
            st.error("Konto na które chcesz się zalogować jest zablokowane.")
    else:
      st.error(f"Użytkownik {username} nie istnieje.")
#rejestracja
def rejestracja():
  st.header("Rejestracja")
  username = st.text_input("Podaj nazwę użytkownika: ")
  password = st.text_input("Podaj hasło: ", type="password")
  if st.button("Zarejestruj"):
    if username in db:
      st.error("Nazwa użytkownika już istnieje. Spróbuj ponownie.")
    else:
      db["zalogowany"] = username
      x = datetime.date.today()
      x = str(x)
      hashed_password = hash_password(password)
      db[username] = {"saldo": 0, "password": hashed_password, "Highest_score": 0, "Admin" : 0, "Blokada" : 0, "Blokada_czas" : 0, "Data_bana" : x}
      st.success(f"Użytkownik {username} został zarejestrowany z początkowym saldem 0.")
      st.session_state.current_user = username
      st.rerun()

#wpłata
def wplata(username):
  st.header("Wpłata środków")
  saldo_przed = db[username]['saldo']
  st.write(f"Aktualne saldo przed wpłatą: {saldo_przed} PLN")
  kwota_doladowania = st.number_input("Podaj kwotę doładowania:", min_value=0, step=1)
  if st.button("Dodaj środki"):
      if kwota_doladowania > 0:
          db[username]["saldo"] += kwota_doladowania
          saldo_po = db[username]['saldo']
          st.success(f"Dodano {kwota_doladowania} PLN. Aktualne saldo: {saldo_po} PLN")
      else:
          st.error("Kwota musi być większa od zera.")


# Funkcja do wypłaty środków
def wyplata(username):
  st.header("Wypłata środków")
  kwota_wyplaty = st.number_input("Podaj kwotę wypłaty:",min_value=0)
  if st.button("Wypłać środki"):
      if kwota_wyplaty > 0:
          if db[username]["saldo"] >= kwota_wyplaty:
              db[username]["saldo"] -= kwota_wyplaty
              st.success(f"Wypłacono {kwota_wyplaty} PLN. Aktualne saldo: {db[username]['saldo']} PLN")
          else:
              st.error("Niewystarczające środki na koncie.")
      else:
          st.error("Kwota musi być większa od zera.")


# Funkcja do sprawdzenia salda
def saldo(username):
  st.header("Aktualne saldo")
  st.write(f"Aktualne saldo: {db[username]['saldo']} PLN")


def get_btc_price():
  url = 'https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=usd'
  response = requests.get(url)
  data = response.json()
  price = data['bitcoin']['usd']
  return price

def ZarzondzanieKontami():
    st.header("Usuwanie kont")
    konto_usuwanie = st.text_input("Podaj konto do usunięcia: " )
    if st.button("usuń konto"):
        if konto_usuwanie is None:
            st.error("Musisz podać nazwę konta.")
        elif konto_usuwanie in db:
            st.success(f"pomyślnie usunięto konto {konto_usuwanie}")
            del db[konto_usuwanie]
        else:
            st.error("Nie ma takiego konta.") 
    st.header("Modyfikacje salda")
    Konto_ustawianie = st.text_input("Podaj konto do zmiany salda: ")
    Saldo_zmienianie = st.number_input("Podaj stan konta do ustawienia: ", min_value=0, step=1)
    if st.button("Zmień Saldo"):
        if Konto_ustawianie is None:
            st.error("Musisz wypełnić 1 pole.")
        elif Konto_ustawianie in db:
            st.success(f"pomyślnie zmieniono saldo konta {Konto_ustawianie} na {Saldo_zmienianie}")
            db[Konto_ustawianie]["saldo"] = Saldo_zmienianie
        else:
                st.error("Nie ma takiego konta.")

def AdminRejestracja():
    st.header("Rejestracja Konta Administracyjnego")
    username = st.text_input("Podaj nazwę użytkownika: ")
    password = st.text_input("Podaj hasło: ", type="password")
    st.write("wyierz uprawnienia konta")
    choice = st.radio("Wybierz opcję", ["Zwykły Urzytkownik", "Administrator", "Główny Administrator"])
    x = 8
    if choice == "Zwykły Urzytkownik":
        x = 0
    elif choice == "Administrator":
      x = 1
    elif choice == "Główny Administrator":
      x = 2
    if st.button("Zarejestruj"):
        if username in db:
          st.error("Nazwa użytkownika już istnieje. Spróbuj ponownie.")
        else:
          hashed_password = hash_password(password)
          db[username] = {"saldo": 0, "password": hashed_password, "Highest_score": 0, "Admin" : x, "Blokada" : 0, "Blokada_czas" : 0}
          st.success(f"Administrator {username} został zarejestrowany.")

def BlokadaKonta():
    st.header("Blokada Konta")
    konto_blokowania = st.text_input("Podaj konto do blokowania: ")
    if st.button("Blokuj konto"):
        if konto_blokowania is None:
            st.error("Musisz podać nazwę konta.")
        elif konto_blokowania in db:
            st.success(f"pomyślnie zablokowano konto {konto_blokowania}")
            db[konto_blokowania]["Blokada"] = 1
        else:
            st.error("Nie ma takiego konta.")
    st.header("Odlokowywanie Konta")
    konto_odblokowania = st.text_input("Podaj konto do odblokowania: ")
    if st.button("Odblokuj konto"):
        if konto_odblokowania is None:
            st.error("Musisz podać nazwę konta.")
        elif konto_odblokowania in db:
            st.success(f"pomyślnie odblokowano konto {konto_odblokowania}")
            db[konto_odblokowania]["Blokada"] = 0
            db[konto_odblokowania]["Blokada_czas"] = 0
        else:
            st.error("Nie ma takiego konta.")
    st.header("Czasowa blokada Konta")
    cz_konto_blokowania = st.text_input("Podaj konto do czasowego blokowania: ")
    czas_blokowania = st.date_input("Podaj datę blokowania (w formacie RRRR-MM-DD): ")
    
    if st.button("Czasowo zablokuj konto"):
        if cz_konto_blokowania is None:
            st.error("Musisz podać nazwę konta.")
        elif cz_konto_blokowania in db:
            st.success(f"pomyślnie zablokowano konto {cz_konto_blokowania}")
            db[cz_konto_blokowania]["Blokada_czas"] = 1
            czas_blokowania = str(czas_blokowania)
            db[cz_konto_blokowania]["Data_bana"] = czas_blokowania
            
            
            #st.write(f"do końca bana zostało: {(w - dzisiaj).days} dni")
            #db[cz_konto_blokowania]["Blokada_czas"] = czas_blokowania
        else:
            st.error("Nie ma takiego konta.")














def Flappy_Bird():
    process = subprocess.Popen(['python', 'program.py'])
    return process

# Funkcja do gry w Coin Flip
def coin_flip(username):
  st.header("Gra w Coin Flip")
  wybor_1 = st.number_input("wybierz stawkę:", min_value=0, step=1)
  if wybor_1 > db[username]["saldo"]:
    st.error("Nie masz wystarczająco środków na koncie.")
    return
  st.write("Wybierz stronę monety: orzeł (o) czy reszka (r).")
  wybor = st.radio("Twój wybór:", ['o', 'r'])
  if st.button("Rzuć monetą"):
      komputer = random.choice(['o', 'r'])
      st.write(f"Wylosowano: {komputer}")
      if wybor == komputer:
          st.success("Gratulacje! Wygrałeś!")
          db[username]["saldo"] += wybor_1 * 0.9
          saldo(username)
      else:
          st.error("Niestety, przegrałeś.")
          db[username]["saldo"] -= wybor_1
          saldo(username)


# Funkcja do gry w Kostka
def kostka(username):
  st.header("Gra w Kostka")
  wybor_1 = st.number_input("wybierz stawkę:", min_value=0, step=1)
  if wybor_1 > db[username]["saldo"]:
    st.error("Nie masz wystarczająco środków na koncie.")
    return
  st.write("Wybierz liczbę od 1 do 6.")
  wybor = st.number_input("Wybierz liczbę od 1 do 6:",min_value=1,max_value=6)
  if st.button("Rzuć kostką"):
      komputer = random.randint(1, 6)
      st.write(f"Wylosowano: {komputer}")
      if wybor == komputer:
          st.success("Gratulacje! Wygrałeś!")
          db[username]["saldo"] += wybor_1 * 5.5
          saldo(username)
      else:
          st.error("Niestety, przegrałeś.")
          db[username]["saldo"] -= wybor_1
          saldo(username)


# Funkcja do gry w Ruletka
def ruletka(username):
  st.header("Gra w Ruletkę")

  # Input dla kwoty
  kwota = st.number_input("Podaj kwotę:", min_value=1, step=1)

  # Jeśli użytkownik nie ma wystarczających środków, zablokuj możliwość wprowadzenia kwoty
  if kwota > db[username]["saldo"]:
      st.error("Nie masz wystarczająco środków na koncie.")
      return

  # Wybór koloru
  czerwony = "czerwony 1-18 (c)"
  niebieski = "niebieski 19-36 (n)"
  zielony = "zielony 0 (z)"
  st.write("Wybierz 'c', 'n' lub 'z'.")
  wybor = st.radio("Twój wybór:", ['c', 'n', 'z'])



  # Przycisk do zatwierdzenia
  if st.button("Zatwierdź wybór"):
      db[username]["saldo"] -= kwota  # Odejmowanie kwoty z salda

      komputer = random.randint(0, 36)
      if 1 <= komputer <= 18:
          wynik = "czerwony"
      elif 19 <= komputer <= 36:
          wynik = "niebieski"
      else:
          wynik = "zielony"

      st.write(f"Wylosowano {komputer} ({wynik})")

      if wybor == 'c' and wynik == "czerwony":
          wygrana = 2 * kwota
          db[username]["saldo"] += wygrana
          st.success(f"Wygrałeś {wygrana} PLN!")
      elif wybor == 'n' and wynik == "niebieski":
          wygrana = 2 * kwota
          db[username]["saldo"] += wygrana
          st.success(f"Wygrałeś {wygrana} PLN!")
      elif wybor == 'z' and wynik == "zielony":
          wygrana = 36 * kwota
          db[username]["saldo"] += wygrana
          st.success(f"Wygrałeś {wygrana} PLN!")
          saldo(username)
      else:
          st.error("Niestety, przegrałeś.")
          saldo(username)


# Funkcja wyboru opcji w menu
def wybierz_opcje():
  st.sidebar.title("Menu")
  if 'current_user' in st.session_state and st.session_state.current_user:
      choice = st.sidebar.radio("Wybierz opcję",["Główne menu", "Gry", "Wyloguj się"])
  else:
      choice = st.sidebar.radio("Wybierz opcję",["Logowanie", "Rejestracja"])
  return choice


# Funkcja z opcjami po zalogowaniu
def menu_glowne():
  y = 1
  if y == 1:
      x = db["zalogowany"]
      high_score = db[x]["Highest_score"]
      y = 2

  st.sidebar.title("Menu")
  st.sidebar.write("Witaj, " + st.session_state.current_user + "!")
  choice = st.sidebar.radio("Wybierz opcję", ["Wpłata", "Wypłata", "Saldo", "Gry", "Wyloguj się"])

  if choice == "Wpłata":
      wplata(st.session_state.current_user)
  elif choice == "Wypłata":
      wyplata(st.session_state.current_user)
  elif choice == "Saldo":
      saldo(st.session_state.current_user)
  elif choice == "Gry":
      gry()
  elif choice == "Wyloguj się":
      st.session_state.current_user = None
      st.success("Wylogowano pomyślnie.")  # Odświeżenie strony
      st.rerun()


# Funkcja z grami
def Menu_Admin():
    st.sidebar.title("Menu")
    st.sidebar.write("Witaj, " + st.session_state.current_user + "!")
    choice = st.sidebar.radio("Wybierz opcję", ["Baza Danych", "Zarządzanie kontami", "Blokady Konta", "Wyloguj się"])

    if choice == "Baza Danych":
      for key in db.keys():
         st.write(f"{key}: {db[key]}")
    elif choice == "Zarządzanie kontami":
        ZarzondzanieKontami()
    elif choice == "Blokady Konta":
        BlokadaKonta()
    elif choice == "Wyloguj się":
      st.session_state.current_user = None
      st.success("Wylogowano pomyślnie.")  # Odświeżenie strony
      st.rerun()

def Menu_head_Admin():
    st.sidebar.title("Menu")
    st.sidebar.write("Witaj, " + st.session_state.current_user + "!")
    choice = st.sidebar.radio("Wybierz opcję", ["Baza Danych", "Zarządzanie kontami","Rejestracja konta administracyjnego", "Czyszczenie bazy danych", "Blokady Konta", "Wyloguj się"])

    if choice == "Baza Danych":
      for key in db.keys():
         st.write(f"{key}: {db[key]}")
      data_wakacji = datetime.date(2025,6,28)
      dzisiaj = datetime.date.today()
      st.write(f"do wakacji zostało: {(data_wakacji - dzisiaj).days} dni")
    elif choice == "Zarządzanie kontami":
        ZarzondzanieKontami()
    elif choice == "Rejestracja konta administracyjnego":
        AdminRejestracja()
    elif choice == "Czyszczenie bazy danych":
        Baza_Czyszczenie()
    elif choice == "Blokady Konta":
        BlokadaKonta()
    elif choice == "Wyloguj się":
      st.session_state.current_user = None
      st.success("Wylogowano pomyślnie.")  # Odświeżenie strony
      st.rerun()















def gry():
  if 'current_user' not in st.session_state or not st.session_state.current_user:
      st.error("Musisz być zalogowany, aby grać.")
      return

  st.header("Gry")
  wybor_gry = st.radio("Wybierz grę:",['Coin Flip', 'Kostka', 'Ruletka', 'Flappy Bird', 'Funkcje'])

  if wybor_gry == 'Coin Flip':
      coin_flip(st.session_state.current_user)
  elif wybor_gry == 'Kostka':
      kostka(st.session_state.current_user)
  elif wybor_gry == 'Ruletka':
      ruletka(st.session_state.current_user)
  elif wybor_gry == 'Flappy Bird':
      global user
      user = st.session_state.current_user
      process = Flappy_Bird()
      st.success(user)
      st.success("Rozpoczęto grę Flappy Bird.")
  elif wybor_gry == 'Funkcje':
      btc_price = get_btc_price()
      st.write(f'Aktualny kurs Bitcoina: **${btc_price}**')

      if st.button('Odśwież'):
          btc_price = get_btc_price()
          st.write(f'Aktualny kurs Bitcoina: **${btc_price}**')


# Funkcja do wyświetlania opcji logowania/rejestracji
def logowanie_rejestracja():
  choice = wybierz_opcje()

  if choice == "Logowanie":
      logowanie()
  elif choice == "Rejestracja":
      rejestracja()
  elif choice == "Główne menu":
      menu_glowne()


# Wywołanie funkcji
if 'current_user' not in st.session_state:
  st.session_state.current_user = None


if st.session_state.current_user:
    f = st.session_state.current_user
    if db[f] is not None and db[f]['Admin'] == 0:
        menu_glowne()
    elif db[f] is not None and db[f]['Admin'] == 1:
        Menu_Admin()
    elif db[f] is not None and db[f]['Admin'] == 2:
        Menu_head_Admin()
else:
    logowanie_rejestracja()
                                
                            

Paste Hosted With By Wklejamy.pl