Tttask Bot
Tttask Bot
import logging
import json
import os
import time
import requests
from aiogram import Bot, Dispatcher, types
from aiogram.filters import Command
def save_data(data):
with open(DATA_FILE, "w") as f:
json.dump(data, f, indent=4)
data = load_data()
try:
if method == "GET":
response = requests.get(url, headers=headers, verify=False)
else:
response = requests.post(url, headers=headers, json=json_data,
verify=False)
response.raise_for_status()
resp_json = response.json()
if resp_json.get("code") == 0:
return resp_json.get("data")
else:
return None
except:
return None
def get_points(token):
url = "https://api.ttask.vip/h5/taskUser/pointsInfo"
result = api_request(url, method="GET", token=token)
if result:
return result.get("points", 0)
return 0
@dp.message(Command("start"))
async def start(message: types.Message):
user_id = str(message.from_user.id)
if user_id not in data:
data[user_id] = {
"email_password_list": [],
"current_index": 0,
"bind_count": 0,
"binded_numbers": []
}
save_data(data)
await message.answer("Welcome! You are registered.")
else:
await message.answer("Welcome back!")
@dp.message(Command("add_account"))
async def add_account(message: types.Message):
if message.from_user.id != OWNER_ID:
return
try:
_, user_id, email, password = message.text.strip().split()
if user_id not in data:
data[user_id] = {
"email_password_list": [],
"current_index": 0,
"bind_count": 0,
"binded_numbers": []
}
data[user_id]["email_password_list"].append({"email": email, "password":
password})
save_data(data)
await message.answer(f"Account added for user {user_id}.")
except:
await message.answer("Format error. Use: /add_account USERID EMAIL
PASSWORD")
@dp.message(Command("bind"))
async def bind_command(message: types.Message):
user_id = str(message.from_user.id)
if user_id not in data:
await message.answer("You are not registered. Send /start first.")
return
@dp.message()
async def get_number(msg: types.Message):
phone = msg.text.strip()
if phone in data[user_id]["binded_numbers"]:
await msg.answer("This number already binded!")
return
creds = data[user_id]["email_password_list"][data[user_id]
["current_index"]]
token = login(creds["email"], creds["password"])
if not token:
await msg.answer("Failed to login. Contact admin.")
return
points = get_points(token)
if points >= MIN_POINTS_TO_SWITCH or data[user_id]["bind_count"] >=
MAX_BINDS_PER_ACCOUNT:
data[user_id]["current_index"] += 1
data[user_id]["bind_count"] = 0
data[user_id]["binded_numbers"] = []
save_data(data)
await msg.answer("Account switched due to limits reached. Please send
again.")
return
data[user_id]["bind_count"] += 1
data[user_id]["binded_numbers"].append(phone)
save_data(data)
@dp.message(Command("status"))
async def status(message: types.Message):
if message.from_user.id != OWNER_ID:
return
text = ""
for uid, info in data.items():
text += f"User {uid}:\n"
text += f" Current Index:
{info['current_index']+1}/{len(info['email_password_list'])}\n"
text += f" Bind Count: {info['bind_count']}\n"
text += f" Numbers: {len(info['binded_numbers'])}\n"
await message.answer(text or "No data yet.")
if __name__ == "__main__":
asyncio.run(main())