EnergyBot/ebot.py
Rezoc d803162b09 Обновить ebot.py
удалены коменты
2026-02-07 15:31:55 +03:00

116 lines
3.9 KiB
Python
Raw 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
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)
@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]
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]
reg_date = user[3]
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()