EnergyBot/ebot.py
2026-02-04 23:49:40 +03:00

126 lines
4.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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