#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()