fix: update bot

This commit is contained in:
2026-05-14 10:13:56 +07:00
parent 023f1f5929
commit ec0befdb5e
3 changed files with 41 additions and 14 deletions

View File

@@ -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

View File

@@ -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
View File

@@ -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 ===")