digitalocean / digitalocean/sample-python

Bot

Ouverte
#39 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Langage dominant
Python
Étoiles
63
Forks
340
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

# bot.py
import sqlite3
import random
from aiogram import Bot, Dispatcher, types, executor
from aiogram.types import ParseMode
from datetime import datetime

# ================= CONFIG =================
BOT_TOKEN = "TELEGRAM_BOT_TOKEN"
ADMIN_ID = 123456789 # Sizning telegram ID
CHANNEL_USERNAME = "@siznikanal"
# ==========================================

bot = Bot(token=BOT_TOKEN)
dp = Dispatcher(bot)

# ============== DATABASE ==================
conn = sqlite3.connect("pubg_bot.db")
cursor = conn.cursor()

cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
telegram_id INTEGER UNIQUE,
username TEXT,
balance INTEGER DEFAULT 0,
referral_id INTEGER,
joined_at TEXT DEFAULT CURRENT_TIMESTAMP
)
""")
conn.commit()

def add_user(telegram_id, username, referral_id=None):
cursor.execute("INSERT OR IGNORE INTO users (telegram_id, username, referral_id) VALUES (?, ?, ?)",
(telegram_id, username, referral_id))
conn.commit()

def update_balance(telegram_id, amount):
cursor.execute("UPDATE users SET balance = balance + ? WHERE telegram_id = ?", (amount, telegram_id))
conn.commit()

def get_user(telegram_id):
cursor.execute("SELECT * FROM users WHERE telegram_id = ?", (telegram_id,))
return cursor.fetchone()

def get_all_users():
cursor.execute("SELECT * FROM users")
return cursor.fetchall()
# ==========================================

# =============== BOT HANDLERS ==============
@dp.message_handler(commands=["start"])
async def start(message: types.Message):
referral_id = None
if len(message.text.split()) > 1:
try:
referral_id = int(message.text.split()[1])
except:
referral_id = None

user = get_user(message.from_user.id)
if not user:
add_user(message.from_user.id, message.from_user.username, referral_id)

# Referral bonus
if referral_id:
update_balance(referral_id, 5) # 5 UC bonus referral uchun

# Obuna tekshiruvi
try:
chat_member = await bot.get_chat_member(CHANNEL_USERNAME, message.from_user.id)
if chat_member.status in ["left", "kicked"]:
await message.answer(f"Avvalo kanalga obuna bo‘ling: {CHANNEL_USERNAME}")
return
except:
await message.answer("Kanalni tekshirishda xatolik yuz berdi. Kanal username tekshiring.")
return

await message.answer("Salom! Siz botga muvaffaqiyatli ulandingiz.\n\n/balance - Balansingizni ko‘rish\n/lucky - Lucky Spin o‘ynash")

@dp.message_handler(commands=["balance"])
async def balance(message: types.Message):
user = get_user(message.from_user.id)
if user:
await message.answer(f"Sizning balansingiz: {user[3]} UC")

@dp.message_handler(commands=["lucky"])
async def lucky(message: types.Message):
user = get_user(message.from_user.id)
if not user:
await message.answer("Avvalo /start bosing")
return
prize = random.choice([0, 5, 10, 20, 50])
update_balance(message.from_user.id, prize)
await message.answer(f"🎰 Lucky Spin natijasi: {prize} UC qo‘shildi!\nYangi balans: {get_user(message.from_user.id)[3]} UC")

# ================ ADMIN COMMANDS =============
@dp.message_handler(lambda message: message.from_user.id == ADMIN_ID, commands=["users"])
async def admin_users(message: types.Message):
users = get_all_users()
text = f"Foydalanuvchilar soni: {len(users)}\n\n"
for u in users:
text += f"ID:{u[1]} | Username: @{u[2]} | Balance: {u[3]} UC\n"
await message.answer(text)

@dp.message_handler(lambda message: message.from_user.id == ADMIN_ID, commands=["add"])
async def admin_add(message: types.Message):
try:
parts = message.text.split()
tg_id = int(parts[1])
amount = int(parts[2])
update_balance(tg_id, amount)
await message.answer(f"{amount} UC foydalanuvchi {tg_id} balansiga qo‘shildi!")
except:
await message.answer("Xatolik! Format: /add ")

# ==========================================

if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Piste de recherche

The issue contains a bot.py listing using Python, aiogram, and SQLite, but does not state what change is wanted. Start by clarifying the intended feature and how it should fit the sample application; no tests, target files beyond bot.py, or acceptance criteria are provided, so completion cannot yet be verified.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python, sqlite
Domaine
backend, databases
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
Calme
Clarté
À clarifier
Accessibilité débutants
25/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.