import telebot import sqlite3 import random import time import re from datetime import datetime TOKEN = "8554851929:AAFOvEGDbmnmwusAdEjv7j1QNaqJ_-lMLCw" bot = telebot.TeleBot(TOKEN) DB_NAME = "energy.db" COLLECT_COOLDOWN = 3600 # 1 час # ---------- БАЗА ДАННЫХ ---------- def init_db(): with sqlite3.connect(DB_NAME) as conn: conn.execute(""" CREATE TABLE IF NOT EXISTS users ( user_id INTEGER PRIMARY KEY, username TEXT, energy INTEGER DEFAULT 0, registered_at TEXT, last_collect INTEGER DEFAULT 0 ) """) def get_user(user_id): with sqlite3.connect(DB_NAME) as conn: cur = conn.execute("SELECT * FROM users WHERE user_id = ?", (user_id,)) return cur.fetchone() def register_user(user_id, username): with sqlite3.connect(DB_NAME) as conn: conn.execute( "INSERT INTO users (user_id, username, registered_at) VALUES (?, ?, ?)", (user_id, username, datetime.now().strftime("%d.%m.%Y")) ) # ---------- УТИЛИТЫ ---------- def format_energy(kw): if kw >= 1_000_000: return f"{kw / 1_000_000:.2f} ГВт⋅ч" elif kw >= 1000: return f"{kw / 1000:.2f} МВт⋅ч" else: return f"{kw} кВт⋅ч" # ---------- СТАРЫЙ ТЕКСТ ---------- REPLY_TEXT = "⚡️ На данный момент отсутствует электроэнергия, Rezoc Bot временно недоступен." OLD_KEYWORDS = r'\b(ботр|кд|огород|ловить|ебот|медали|погода|ловушка|копать|королевство|/bal|/kd)\b' # ---------- ТОП ---------- @bot.message_handler(commands=['etop']) def top_handler(message): with sqlite3.connect(DB_NAME) as conn: rows = conn.execute( "SELECT username, energy FROM users ORDER BY energy DESC LIMIT 15" ).fetchall() if not rows: bot.reply_to(message, "Топ пока пуст 😔") return text = "🏆 ТОП 15 по энергии\n\n" for i, (username, energy) in enumerate(rows, 1): name_display = username if username else f"User {i}" text += f"{i}. {name_display}: {format_energy(energy)}\n" bot.reply_to(message, text) # ---------- /start ---------- @bot.message_handler(commands=['start']) def start_handler(message): bot.reply_to(message, ('Чтобы начать игру введите "квт"')) # ---------- ХЕНДЛЕР ---------- @bot.message_handler(func=lambda m: m.text is not None) def main_handler(message): text = message.text.lower() user_id = message.from_user.id username = message.from_user.first_name or f"User{user_id}" # ---------- Мини-игра ---------- if text == "квт" or text == "профиль": user = get_user(user_id) if not user: register_user(user_id, username) user = get_user(user_id) # СОБРАТЬ if text == "квт": now = int(time.time()) last = user[4] ban = user[5] # last_collect if now - last < COLLECT_COOLDOWN: wait = (COLLECT_COOLDOWN - (now - last)) // 60 bot.reply_to(message, f"⏳ Рано. Попробуй через {wait} мин.") return gain = random.randint(1, 100) with sqlite3.connect(DB_NAME) as conn: conn.execute( "UPDATE users SET energy = energy + ?, last_collect = ? WHERE user_id = ?", (gain, now, user_id) ) bot.reply_to(message, f"⚡ Ты собрал {gain} кВт⋅ч энергии!\nБаланс - профиль\nТоп 15 - /etop") return # БАЛ if text == "профиль": energy = user[2] # energy reg_date = user[3] # registered_at bot.reply_to( message, f"⚡ Энергия: {format_energy(energy)}\n🏆Топ 10 - /top\n\n" f"📅 Регистрация: {reg_date}\n" f"👤 Игрок: {user[1]}" ) return # ---------- ЗАПУСК ---------- init_db() print("⚡ Energy Bot запущен") bot.send_message(-1001766074965, "✅ Бот перезапущен.") bot.infinity_polling()