Bot
还没有人认领这个 Issue。
评估
- 难度
- 5/5
- 预计耗时
- 一周以上
- 新手友好度
- 25/100
调研方向
该 issue 包含一个使用 Python、aiogram 和 SQLite 的 bot.py 列表,但没有说明需要进行什么更改。首先明确预期功能以及它应如何融入示例应用;未提供测试、除 bot.py 之外的目标文件或验收标准,因此目前还无法验证是否完成。
由索引模型根据 Issue 内容生成。
描述
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)
- 主要语言
- Python
- 星标
- 63
- 派生
- 340
- PR 合并指标
- 30 天内没有已合并 PR
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 90/100
learningequality/ricecooker#747 ·
-
难度 2/5 1-3 小时 新手友好度 68/100
BSData/horus-heresy-3rd-edition#3171 ·
-
enhancement
难度 2/5 1-3 小时 新手友好度 72/100
-
难度 2/5 1-3 小时 新手友好度 76/100
run-llama/llama_index#23199 ·
-
难度 2/5 1-3 小时 新手友好度 84/100
KhronosGroup/glTF-Blender-IO#2769 ·