Spaces:
Running
Running
Update main.py
Browse files
main.py
CHANGED
|
@@ -50,6 +50,8 @@ SERVER_SCAMMER_SHEET = "Server Scammer Files"
|
|
| 50 |
SERVER_SCAMMER_RANGE = "B6:F"
|
| 51 |
DWC_SHEET = "DWC Servers / Users"
|
| 52 |
DWC_RANGE = "B6:G"
|
|
|
|
|
|
|
| 53 |
|
| 54 |
# Sheet Names and Ranges within VALUES_DUPE_SPREADSHEET_ID
|
| 55 |
DUPE_LIST_SHEET = "Dupe List"
|
|
@@ -67,8 +69,7 @@ CACHE_UPDATE_INTERVAL_SECONDS = int(os.getenv('CACHE_UPDATE_INTERVAL_SECONDS', 6
|
|
| 67 |
# Webhook URLs
|
| 68 |
SCAMMER_WEBHOOK_URL = os.getenv("SCAMMER_WEBHOOK_URL")
|
| 69 |
VALUE_WEBHOOK_URL = os.getenv("VALUE_WEBHOOK_URL")
|
| 70 |
-
|
| 71 |
-
DUPE_CHECK_WEBHOOK_URL = os.getenv("WEBHOOK_URL")
|
| 72 |
|
| 73 |
|
| 74 |
# --- Global Cache ---
|
|
@@ -78,6 +79,7 @@ cache = {
|
|
| 78 |
"user_scammers": [],
|
| 79 |
"server_scammers": [],
|
| 80 |
"dwc": [],
|
|
|
|
| 81 |
"dupes": [], # List of duped usernames
|
| 82 |
"last_updated": None, # Timestamp of the last successful/partial update
|
| 83 |
"is_ready": False, # Is the cache populated at least once?
|
|
@@ -376,6 +378,33 @@ def process_dwc_data(values): # For DWC Sheet
|
|
| 376 |
processed_data.append(processed_item)
|
| 377 |
return processed_data
|
| 378 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 379 |
def process_dupe_list_data(values): # For Dupe List Sheet
|
| 380 |
if not values: return []
|
| 381 |
# Expected range like B2:B
|
|
@@ -513,16 +542,19 @@ async def update_cache_periodically():
|
|
| 513 |
f"{quote_sheet_name(USER_SCAMMER_SHEET)}!{USER_SCAMMER_RANGE}",
|
| 514 |
f"{quote_sheet_name(SERVER_SCAMMER_SHEET)}!{SERVER_SCAMMER_RANGE}",
|
| 515 |
f"{quote_sheet_name(DWC_SHEET)}!{DWC_RANGE}",
|
|
|
|
| 516 |
]
|
| 517 |
scammer_dwc_processor_map = {
|
| 518 |
USER_SCAMMER_SHEET: process_user_scammer_data,
|
| 519 |
SERVER_SCAMMER_SHEET: process_server_scammer_data,
|
| 520 |
DWC_SHEET: process_dwc_data,
|
|
|
|
| 521 |
}
|
| 522 |
scammer_dwc_target_key_map = {
|
| 523 |
USER_SCAMMER_SHEET: "user_scammers",
|
| 524 |
SERVER_SCAMMER_SHEET: "server_scammers",
|
| 525 |
DWC_SHEET: "dwc",
|
|
|
|
| 526 |
}
|
| 527 |
|
| 528 |
values_dupes_ranges = [f"{quote_sheet_name(DUPE_LIST_SHEET)}!{DUPE_LIST_RANGE}"]
|
|
@@ -1024,7 +1056,8 @@ async def get_scammers():
|
|
| 1024 |
return {
|
| 1025 |
"users": cache.get("user_scammers", []),
|
| 1026 |
"servers": cache.get("server_scammers", []),
|
| 1027 |
-
"dwc": cache.get("dwc", [])
|
|
|
|
| 1028 |
}
|
| 1029 |
|
| 1030 |
@app.get("/api/dupes")
|
|
|
|
| 50 |
SERVER_SCAMMER_RANGE = "B6:F"
|
| 51 |
DWC_SHEET = "DWC Servers / Users"
|
| 52 |
DWC_RANGE = "B6:G"
|
| 53 |
+
TRUSTED_SHEET = "Trusted Users / Servers"
|
| 54 |
+
TRUSTED_RANGE = "B6:E"
|
| 55 |
|
| 56 |
# Sheet Names and Ranges within VALUES_DUPE_SPREADSHEET_ID
|
| 57 |
DUPE_LIST_SHEET = "Dupe List"
|
|
|
|
| 69 |
# Webhook URLs
|
| 70 |
SCAMMER_WEBHOOK_URL = os.getenv("SCAMMER_WEBHOOK_URL")
|
| 71 |
VALUE_WEBHOOK_URL = os.getenv("VALUE_WEBHOOK_URL")
|
| 72 |
+
DUPE_CHECK_WEBHOOK_URL = os.getenv("DUPE_CHECK_WEBHOOK_URL")
|
|
|
|
| 73 |
|
| 74 |
|
| 75 |
# --- Global Cache ---
|
|
|
|
| 79 |
"user_scammers": [],
|
| 80 |
"server_scammers": [],
|
| 81 |
"dwc": [],
|
| 82 |
+
"trusted": [], # List of trusted users/servers
|
| 83 |
"dupes": [], # List of duped usernames
|
| 84 |
"last_updated": None, # Timestamp of the last successful/partial update
|
| 85 |
"is_ready": False, # Is the cache populated at least once?
|
|
|
|
| 378 |
processed_data.append(processed_item)
|
| 379 |
return processed_data
|
| 380 |
|
| 381 |
+
def process_trusted_data(values): # For Trusted Users/Servers Sheet
|
| 382 |
+
if not values: return []
|
| 383 |
+
processed_data = []
|
| 384 |
+
for row in values: # Expected range like B6:E
|
| 385 |
+
if not row or len(row) < 2: continue
|
| 386 |
+
# Indices based on B6:E (0-indexed from B)
|
| 387 |
+
discord_id = clean_string_optional(row[0]) if len(row) > 0 else None # Col B
|
| 388 |
+
discord_username = clean_string_optional(row[1]) if len(row) > 1 else None # Col C
|
| 389 |
+
discord_server_id = clean_string_optional(row[2]) if len(row) > 2 else None # Col D
|
| 390 |
+
roblox_username = clean_string_optional(row[3]) if len(row) > 3 else None # Col E
|
| 391 |
+
|
| 392 |
+
# Skip if all identifiers are missing
|
| 393 |
+
if not discord_id and not discord_username and not discord_server_id and not roblox_username: continue
|
| 394 |
+
# Skip if it looks like a header row
|
| 395 |
+
if str(discord_id).lower() == 'discord id' or str(discord_username).lower() == 'discord username':
|
| 396 |
+
continue
|
| 397 |
+
|
| 398 |
+
processed_item = {
|
| 399 |
+
'discord_id': discord_id,
|
| 400 |
+
'discord_username': discord_username,
|
| 401 |
+
'discord_server_id': discord_server_id,
|
| 402 |
+
'roblox_username': roblox_username,
|
| 403 |
+
'roblox_avatar_url': None # Will be filled later
|
| 404 |
+
}
|
| 405 |
+
processed_data.append(processed_item)
|
| 406 |
+
return processed_data
|
| 407 |
+
|
| 408 |
def process_dupe_list_data(values): # For Dupe List Sheet
|
| 409 |
if not values: return []
|
| 410 |
# Expected range like B2:B
|
|
|
|
| 542 |
f"{quote_sheet_name(USER_SCAMMER_SHEET)}!{USER_SCAMMER_RANGE}",
|
| 543 |
f"{quote_sheet_name(SERVER_SCAMMER_SHEET)}!{SERVER_SCAMMER_RANGE}",
|
| 544 |
f"{quote_sheet_name(DWC_SHEET)}!{DWC_RANGE}",
|
| 545 |
+
f"{quote_sheet_name(TRUSTED_SHEET)}!{TRUSTED_RANGE}",
|
| 546 |
]
|
| 547 |
scammer_dwc_processor_map = {
|
| 548 |
USER_SCAMMER_SHEET: process_user_scammer_data,
|
| 549 |
SERVER_SCAMMER_SHEET: process_server_scammer_data,
|
| 550 |
DWC_SHEET: process_dwc_data,
|
| 551 |
+
TRUSTED_SHEET: process_trusted_data,
|
| 552 |
}
|
| 553 |
scammer_dwc_target_key_map = {
|
| 554 |
USER_SCAMMER_SHEET: "user_scammers",
|
| 555 |
SERVER_SCAMMER_SHEET: "server_scammers",
|
| 556 |
DWC_SHEET: "dwc",
|
| 557 |
+
TRUSTED_SHEET: "trusted",
|
| 558 |
}
|
| 559 |
|
| 560 |
values_dupes_ranges = [f"{quote_sheet_name(DUPE_LIST_SHEET)}!{DUPE_LIST_RANGE}"]
|
|
|
|
| 1056 |
return {
|
| 1057 |
"users": cache.get("user_scammers", []),
|
| 1058 |
"servers": cache.get("server_scammers", []),
|
| 1059 |
+
"dwc": cache.get("dwc", []),
|
| 1060 |
+
"trusted": cache.get("trusted", [])
|
| 1061 |
}
|
| 1062 |
|
| 1063 |
@app.get("/api/dupes")
|