fix: update bot
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
OPENROUTER_API_KEY=your_openrouter_api_key_here
|
OPENROUTER_API_KEY=your_openrouter_api_key_here
|
||||||
BOT_API_SECRET=your_super_secret_bot_key
|
BOT_API_SECRET=your_super_secret_bot_key
|
||||||
BACKEND_URL=http://localhost:3001/api
|
BACKEND_URL=http://localhost:3001/api
|
||||||
|
BOT_MODE=PROD
|
||||||
TRANSACTION_TYPES=SERVICE,JOB
|
TRANSACTION_TYPES=SERVICE,JOB
|
||||||
COUNT_PER_TYPE=1
|
COUNT_PER_TYPE=1
|
||||||
@@ -19,9 +19,9 @@ def generate_bot_data():
|
|||||||
Buat 1 set data dalam format JSON yang berisi:
|
Buat 1 set data dalam format JSON yang berisi:
|
||||||
{
|
{
|
||||||
"akun1": {
|
"akun1": {
|
||||||
"nama_lengkap": "Nama orang Indonesia yang realistis",
|
"nama_lengkap": "Nama asli orang Indonesia yang realistis (Hanya nama orang, misal: Budi Santoso, Siti Aminah)",
|
||||||
"email": "Email pribadi realistis berdasarkan nama",
|
"email": "Email pribadi realistis berdasarkan nama",
|
||||||
"nama_bisnis": "Nama profesional atau brand jasa (contoh: Jasa Desain Grafis Budi, Tukang AC Cepat)",
|
"nama_bisnis": "Nama brand jasa profesional (misal: Budi Design, CV Sejuk Jaya)",
|
||||||
"deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan",
|
"deskripsi_bisnis": "Deskripsi singkat tentang keahlian atau layanan yang ditawarkan",
|
||||||
"lokasi": {
|
"lokasi": {
|
||||||
"lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)",
|
"lat": "Latitude acak di area perkotaan Indonesia (misal: Jakarta, Bandung, atau Surabaya)",
|
||||||
@@ -35,13 +35,13 @@ def generate_bot_data():
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"akun2": {
|
"akun2": {
|
||||||
"nama_lengkap": "Nama pembeli Indonesia yang realistis",
|
"nama_lengkap": "Nama asli pembeli Indonesia yang realistis (Hanya nama orang)",
|
||||||
"email": "Email pribadi realistis berdasarkan nama"
|
"email": "Email pribadi realistis berdasarkan nama"
|
||||||
},
|
},
|
||||||
"layanan": {
|
"layanan": {
|
||||||
"judul": "Judul jasa yang ditawarkan",
|
"judul": "Judul jasa yang ditawarkan",
|
||||||
"deskripsi": "Deskripsi lengkap layanan tersebut",
|
"deskripsi": "Deskripsi lengkap layanan tersebut",
|
||||||
"harga": "Angka saja dalam rupiah, misal 50000"
|
"harga": 50000
|
||||||
},
|
},
|
||||||
"review": {
|
"review": {
|
||||||
"rating": 5,
|
"rating": 5,
|
||||||
|
|||||||
46
main.py
46
main.py
@@ -3,19 +3,40 @@ import time
|
|||||||
import random
|
import random
|
||||||
import requests
|
import requests
|
||||||
import schedule
|
import schedule
|
||||||
|
import logging
|
||||||
|
from datetime import datetime
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from ai_generator import generate_bot_data
|
from ai_generator import generate_bot_data
|
||||||
|
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
# Setup Logging
|
||||||
|
log_filename = "bot_activity.log"
|
||||||
|
logging.basicConfig(
|
||||||
|
level=logging.INFO,
|
||||||
|
format='%(asctime)s [%(levelname)s] %(message)s',
|
||||||
|
handlers=[
|
||||||
|
logging.FileHandler(log_filename),
|
||||||
|
logging.StreamHandler()
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
BACKEND_URL = os.getenv("BACKEND_URL", "http://localhost:3001/api")
|
BACKEND_URL = os.getenv("BACKEND_URL", "http://localhost:3001/api")
|
||||||
BOT_SECRET = os.getenv("BOT_API_SECRET", "")
|
BOT_SECRET = os.getenv("BOT_API_SECRET", "")
|
||||||
|
BOT_MODE = os.getenv("BOT_MODE", "PROD").upper() # TEST or PROD
|
||||||
|
|
||||||
# Ambil list tipe transaksi dari ENV (misal: "SERVICE,JOB")
|
# Ambil list tipe transaksi dari ENV (misal: "SERVICE,JOB")
|
||||||
ALLOWED_TYPES = os.getenv("TRANSACTION_TYPES", "SERVICE,JOB").split(",")
|
ALLOWED_TYPES = os.getenv("TRANSACTION_TYPES", "SERVICE,JOB").split(",")
|
||||||
# Ambil jumlah transaksi per tipe
|
# Ambil jumlah transaksi per tipe
|
||||||
COUNT_PER_TYPE = int(os.getenv("COUNT_PER_TYPE", "1"))
|
COUNT_PER_TYPE = int(os.getenv("COUNT_PER_TYPE", "1"))
|
||||||
|
|
||||||
|
def smart_sleep(seconds):
|
||||||
|
"""Sleep only if BOT_MODE is PROD"""
|
||||||
|
if BOT_MODE == "PROD":
|
||||||
|
log(f"Sleeping for {seconds}s...")
|
||||||
|
time.sleep(seconds)
|
||||||
|
else:
|
||||||
|
log("Skipping delay (TEST mode)")
|
||||||
|
|
||||||
headers = {
|
headers = {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
@@ -23,7 +44,7 @@ headers = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
def log(msg):
|
def log(msg):
|
||||||
print(f"[BOT] {time.strftime('%Y-%m-%d %H:%M:%S')} - {msg}")
|
logging.info(msg)
|
||||||
|
|
||||||
def run_service_simulation():
|
def run_service_simulation():
|
||||||
"""Menjalankan 1 siklus transaksi Layanan/Service"""
|
"""Menjalankan 1 siklus transaksi Layanan/Service"""
|
||||||
@@ -47,9 +68,11 @@ def run_service_simulation():
|
|||||||
res_data1 = req1.json()
|
res_data1 = req1.json()
|
||||||
provider_id = res_data1['data']['user1']['providerProfile']['id']
|
provider_id = res_data1['data']['user1']['providerProfile']['id']
|
||||||
buyer_id = res_data1['data']['user2']['id']
|
buyer_id = res_data1['data']['user2']['id']
|
||||||
log(f"Accounts created! ProviderID: {provider_id}, BuyerID: {buyer_id}")
|
user1 = res_data1['data']['user1']
|
||||||
|
user2 = res_data1['data']['user2']
|
||||||
|
log(f"Accounts created! Provider: {user1['name']} ({user1['email']}), Buyer: {user2['name']} ({user2['email']})")
|
||||||
|
|
||||||
time.sleep(random.randint(60, 180))
|
smart_sleep(random.randint(60, 180))
|
||||||
|
|
||||||
# 3. Create Service
|
# 3. Create Service
|
||||||
log("Step 2: Create Service")
|
log("Step 2: Create Service")
|
||||||
@@ -63,9 +86,9 @@ def run_service_simulation():
|
|||||||
|
|
||||||
res_data2 = req2.json()
|
res_data2 = req2.json()
|
||||||
service_id = res_data2['data']['id']
|
service_id = res_data2['data']['id']
|
||||||
log(f"Service created! ServiceID: {service_id}")
|
log(f"Service created! '{res_data2['data']['name']}' - Price: Rp {res_data2['data']['price']}")
|
||||||
|
|
||||||
time.sleep(random.randint(120, 300))
|
smart_sleep(random.randint(120, 300))
|
||||||
|
|
||||||
# 4. Simulate Transaction
|
# 4. Simulate Transaction
|
||||||
log("Step 3: Place Order (Service)")
|
log("Step 3: Place Order (Service)")
|
||||||
@@ -105,9 +128,11 @@ def run_job_simulation():
|
|||||||
res_data1 = req1.json()
|
res_data1 = req1.json()
|
||||||
provider_id = res_data1['data']['user1']['providerProfile']['id']
|
provider_id = res_data1['data']['user1']['providerProfile']['id']
|
||||||
buyer_id = res_data1['data']['user2']['id']
|
buyer_id = res_data1['data']['user2']['id']
|
||||||
log(f"Accounts created! ProviderID: {provider_id}, BuyerID: {buyer_id}")
|
user1 = res_data1['data']['user1']
|
||||||
|
user2 = res_data1['data']['user2']
|
||||||
|
log(f"Accounts created! Provider: {user1['name']} ({user1['email']}), Buyer: {user2['name']} ({user2['email']})")
|
||||||
|
|
||||||
time.sleep(random.randint(120, 300))
|
smart_sleep(random.randint(120, 300))
|
||||||
|
|
||||||
# 3. Simulate Job Transaction (Post Job -> Apply -> Accept -> Transact)
|
# 3. Simulate Job Transaction (Post Job -> Apply -> Accept -> Transact)
|
||||||
log("Step 2: Simulate Job Lifecycle")
|
log("Step 2: Simulate Job Lifecycle")
|
||||||
@@ -122,7 +147,9 @@ def run_job_simulation():
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
res_data2 = req2.json()
|
res_data2 = req2.json()
|
||||||
log(f"Job Transaction Completed! JobID: {res_data2['data']['job']['id']}, OrderID: {res_data2['data']['transaction']['orderId']}")
|
job_title = res_data2['data']['job']['title']
|
||||||
|
order_id = res_data2['data']['transaction']['orderId']
|
||||||
|
log(f"Job Transaction Completed! Job: '{job_title}', OrderID: {order_id}")
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def run_job():
|
def run_job():
|
||||||
@@ -157,8 +184,7 @@ def run_job():
|
|||||||
# Jeda antar simulasi dalam batch (15-45 menit)
|
# Jeda antar simulasi dalam batch (15-45 menit)
|
||||||
if i < len(tasks) - 1:
|
if i < len(tasks) - 1:
|
||||||
batch_delay = random.randint(900, 2700)
|
batch_delay = random.randint(900, 2700)
|
||||||
log(f"Jeda antar simulasi batch: {batch_delay} detik...")
|
smart_sleep(batch_delay)
|
||||||
time.sleep(batch_delay)
|
|
||||||
|
|
||||||
log(f"=== Batch Selesai: {success_count}/{len(tasks)} Berhasil ===")
|
log(f"=== Batch Selesai: {success_count}/{len(tasks)} Berhasil ===")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user