Bot
Chưa có ai nhận issue này.
Đánh giá
- Độ khó
- 5/5
- Thời gian dự kiến
- Hơn một tuần
- Mức phù hợp với người mới
- 25/100
Hướng nghiên cứu
Issue chứa một listing của bot.py sử dụng Python, aiogram và SQLite, nhưng không nêu rõ thay đổi nào được mong muốn. Hãy bắt đầu bằng việc làm rõ tính năng dự kiến và cách tính năng đó nên phù hợp với ứng dụng mẫu; không có test, tệp mục tiêu nào ngoài bot.py hoặc tiêu chí chấp nhận nào được cung cấp, vì vậy hiện chưa thể xác minh việc hoàn thành.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Mô tả
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 <telegram_id> ")
==========================================
if name == "main":
executor.start_polling(dp, skip_updates=True)
- Ngôn ngữ chính
- Python
- Star
- 63
- Fork
- 340
- Chỉ số merge pull request
- Không có pull request nào được merge trong 30 ngày
Hướng dẫn đóng góp
Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue tương tự
-
bug
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 90/100
learningequality/ricecooker#747 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 68/100
BSData/horus-heresy-3rd-edition#3171 ·
-
enhancement
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
run-llama/llama_index#23199 ·
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 84/100
KhronosGroup/glTF-Blender-IO#2769 ·