#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