#!/usr/bin/env python3
# main.py - API Scan & Auto Connect Dual Bot
import time
import requests
from dual import DualBot
from prompt import debug_prompt, status_prompt
def scan_apis():
"""Scan semua API keys dan test functionality"""
print("๐ Scanning API Keys...")
apis_to_test = [
{
"name": "Groq",
"key": "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",
"url": "https://api.groq.com/openai/v1/chat/completions",
"method": "groq"
},
{
"name": "DeepSeek",
"key": "sk-018cc05d3a574de68947e669673fdf65",
"url": "https://api.deepseek.com/chat/completions",
"method": "deepseek"
},
{
"name": "Gemini",
"key": "AIzaSyDVoBSniv6CtvNZDPxvPNRPfRXWvj3304M",
"url": "https://generativelanguage.googleapis.com/v1/models/gemini-2.0-flash:generateContent",
"method": "gemini"
}
]
working_apis = []
for api in apis_to_test:
print(f"๐งช Testing {api['name']}...")
try:
if test_api(api):
print(f"โ
{api['name']} - WORKING")
working_apis.append(api['name'])
else:
print(f"โ {api['name']} - FAILED")
except Exception as e:
print(f"โ {api['name']} - ERROR: {e}")
return working_apis
def test_api(api):
"""Test individual API"""
test_prompt = "Hai! Beri salam pendek dalam Bahasa Malaysia."
try:
if api['method'] == 'groq':
headers = {"Authorization": f"Bearer {api['key']}"}
data = {
"model": "llama-3.1-8b-instant",
"messages": [{"role": "user", "content": test_prompt}],
"max_tokens": 50
}
response = requests.post(api['url'], headers=headers, json=data, timeout=10)
return response.status_code == 200
elif api['method'] == 'deepseek':
headers = {"Authorization": f"Bearer {api['key']}"}
data = {
"model": "deepseek-chat",
"messages": [{"role": "user", "content": test_prompt}],
"max_tokens": 50
}
response = requests.post(api['url'], headers=headers, json=data, timeout=10)
return response.status_code == 200
elif api['method'] == 'gemini':
url = f"{api['url']}?key={api['key']}"
data = {"contents": [{"parts": [{"text": test_prompt}]}]}
response = requests.post(url, json=data, timeout=10)
return response.status_code == 200
except:
return False
def start_system():
"""Start system dengan timing adjustment"""
print(status_prompt("SYSTEM", "Starting Dual Bot System..."))
# FASA 1: API Testing dengan TIMEOUT AWARENESS
print(debug_prompt("Phase 1: Quick API Scan"))
start_scan_time = time.time()
working_apis = scan_apis()
scan_duration = time.time() - start_scan_time
print(debug_prompt(f"API scan took {scan_duration:.1f}s"))
# Adjust connection timeout based on scan time
remaining_time = 25 - scan_duration # 25s total allocation
if remaining_time < 10:
print(debug_prompt(f"โ ๏ธ Low time remaining: {remaining_time:.1f}s"))
if not working_apis:
print("โ ๏ธ Some APIs failed, but continuing with available ones...")
# FASA 2: Auto Connect dengan adjusted timing
print(debug_prompt("Phase 2: Auto Connecting Dual Bot"))
dual_bot = DualBot()
# ๐ SET CONNECTION TIMEOUT based on remaining time
min_timeout = max(15, remaining_time - 5) # Minimum 15s, keep 5s buffer
print(debug_prompt(f"Set connection timeout: {min_timeout}s"))
return dual_bot.start()
def main():
print(status_prompt("SYSTEM", "Starting API Scan & Auto Connect..."))
# FASA 1: Scan API Keys
print(debug_prompt("Phase 1: Scanning APIs"))
working_apis = scan_apis()
if not working_apis:
print("โ CRITICAL: No working APIs found!")
return
print(status_prompt("API", f"Working: {', '.join(working_apis)}"))
# FASA 2: Auto Connect Dual Bot
print(debug_prompt("Phase 2: Auto Connecting Dual Bot"))
bot = DualBot()
try:
if bot.start():
print(status_prompt("SYSTEM", "โ
Dual Bot Connected & Running!"))
print(debug_prompt("Press Ctrl+C to stop"))
# Monitor loop
while bot.is_running():
time.sleep(10)
else:
print(status_prompt("SYSTEM", "โ Dual Bot failed to connect"))
except KeyboardInterrupt:
print(status_prompt("SYSTEM", "Shutdown requested..."))
bot.stop()
except Exception as e:
print(debug_prompt(f"System error: {e}"))
bot.stop()
if __name__ == "__main__":
main()