from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
from gevent import pywsgi
app = Flask(__name__)
# Конфигурация базы данных (в данном примере используем SQLite)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///users.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# Инициализация базы данных
db = SQLAlchemy(app)
CORS(app, resources={r"/*": {"origins": "https://yann1n.github.io"}})
# Модель пользователя
class User(db.Model):
id = db.Column(db.Integer, primary_key=True) # ID пользователя (уникальный)
username = db.Column(db.String(80), nullable=False) # Никнейм пользователя
def __repr__(self):
return f"<User {self.id} - {self.username}>"
# Создание таблицы пользователей (если она еще не создана)
with app.app_context():
db.create_all()
# Маршрут для сохранения данных пользователя
@app.route('/save_user', methods=['POST'])
def save_user():
data = request.json
user_id = data.get('id')
username = data.get('username')
if user_id and username:
# Проверяем, существует ли уже пользователь с таким ID
user = User.query.get(user_id)
if user:
# Если пользователь существует, обновляем его никнейм
user.username = username
message = "Данные пользователя обновлены"
else:
# Если пользователя нет, создаем нового
user = User(id=user_id, username=username)
db.session.add(user)
message = "Пользователь создан"
# Сохраняем изменения в базе данных
db.session.commit()
return jsonify({"message": message, "user": {"id": user.id, "username": user.username}}), 200
else:
return jsonify({"error": "Неверные данные"}), 400
if __name__ == '__main__':
context = ('server.crt', 'server.key') # certificate and key files
app.run(host='0.0.0.0', debug=True, ssl_context=context)
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="viewport-fit=cover, width=device-width, initial-scale=1.0, user-scalable=no">
<link href="https://fonts.googleapis.com/css?family=Open+Sans&display=swap" rel="stylesheet">
<script src="https://telegram.org/js/telegram-web-app.js"></script>
<title>Мой Кликер</title>
<style>
/* Общие стили */
</style>
</head>
<body>
<!-- Экран загрузки -->
<div id="loadingScreen">
<div class="loading-icon">
<img src="sorrel.png" alt="Иконка щавеля">
<div class="spinner"></div>
</div>
</div>
<header class="top-panel">
<div class="bonus-block">
<img src="present.png" alt="Иконка подарка">
<span>
<span>ЕЖЕДНЕВНЫЙ</span>
<span>БОНУС</span>
</span>
</div>
<div class="settings-block">
<img src="sorrel.png" alt="Иконка листика">
<span>+20 В ЧАС</span>
<img src="settings.png" alt="Иконка настроек">
</div>
</header>
<main class="container">
<section class="counter">
<img src="sorrel.png" alt="Иконка листика">
<span>25689348589</span>
</section>
<div class="seedbed-container" id="seedbedContainer">
<img draggable="false" src="seedbed.png" alt="Иконка грядки" class="seedbed" id="seedbed">
<div class="glow"></div>
</div>
</main>
<footer class="bottom-panel">
<a href="friends.html" style="text-decoration: none; color: inherit;">
<div class="bottom-panel-item">
<img src="refs.png" alt="Иконка друзей">
<span>ДРУЗЬЯ</span>
</div>
</a>
<div class="separator"></div>
<div class="bottom-panel-item">
<img src="shovel.png" alt="Иконка лопаты">
<span>ЩОВЭЛ</span>
</div>
<div class="separator"></div>
<div class="bottom-panel-item">
<img src="coins.png" alt="Иконка монет">
<span>ЗАДАНИЯ</span>
</div>
<div class="separator"></div>
<div class="bottom-panel-item">
<img src="game.png" alt="Иконка мини-игр">
<span>МИНИ-ИГРЫ</span>
</div>
</footer>
<script>
// Функция для получения данных пользователя из Telegram
function getTelegramUserData() {
// Проверяем, доступен ли объект Telegram Web App
if (window.Telegram.WebApp) {
const tg = window.Telegram.WebApp;
// Получаем данные пользователя
const userId = tg.initDataUnsafe.user.id;
const userName = tg.initDataUnsafe.user.first_name;
// Отправляем данные пользователя на сервер
fetch('https://185.105.88.12:5000/save_user', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
id: userId,
username: userName
})
})
.then(response => response.json())
.then(data => {
console.log('Данные пользователя сохранены:', data);
})
.catch(error => {
console.error('Ошибка при сохранении данных пользователя:', error);
});
} else {
console.error('Telegram Web App API недоступен');
}
}
// Вызываем функцию получения данных пользователя после загрузки страницы
window.addEventListener('load', getTelegramUserData);
const seedbedContainer = document.getElementById('seedbedContainer');
const seedbed = document.getElementById('seedbed');
const loadingScreen = document.getElementById('loadingScreen');
const container = document.querySelector('.container');
// Функция для скрытия экрана загрузки после загрузки страницы
window.addEventListener('load', () => {
setTimeout(() => {
loadingScreen.classList.add('hidden');
setTimeout(() => {
container.style.display = 'flex';
}, 300); // Задержка для плавного перехода
}, 3300); // 5000 миллисекунд = 5 секунд (можно изменить на 7000 для 7 секунд)
});
// Функция для проверки попадания клика в область изображения
function isClickInsideSeedbed(event) {
const rect = seedbed.getBoundingClientRect(); // Получаем размеры и положение изображения
const clickX = event.clientX;
const clickY = event.clientY;
// Проверяем, находится ли клик в пределах изображения
return (
clickX >= rect.left &&
clickX <= rect.right &&
clickY >= rect.top &&
clickY <= rect.bottom
);
}
// Обработчик клика по контейнеру
seedbedContainer.addEventListener('click', (event) => {
if (isClickInsideSeedbed(event)) {
seedbed.classList.add('clicked');
setTimeout(() => {
seedbed.classList.remove('clicked');
}, 200);
}
});
</script>
</body>
</html>