From 8dea6c48621b6f933a3a88fbffa4277bda8c00c5 Mon Sep 17 00:00:00 2001 From: Arslaan Pathan Date: Thu, 9 Jul 2026 17:58:29 +1200 Subject: Botnet deployments work! :yayayayayay-ctp: --- src/botnet.py | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 src/botnet.py (limited to 'src/botnet.py') diff --git a/src/botnet.py b/src/botnet.py new file mode 100644 index 0000000..46b59d5 --- /dev/null +++ b/src/botnet.py @@ -0,0 +1,67 @@ +from .db import create_deployment, get_daily_user_deployment_count, get_deployment, update_deployment_status, get_active_users, get_user, add_deployment_message, get_deployment_messages +from slack_sdk.web.async_client import AsyncWebClient +import os +from dotenv import load_dotenv + +DAILY_LIMIT = 2 + +load_dotenv() +selfbot_token = os.environ.get("SLACK_SELFBOT_OAUTH_XOXP") + +async def deploy_message(user_id: str, message: str): + user = await get_user(user_id) + if not user: + return { + "success": False, + "error": "You must be part of the botnet to deploy messages!" + } + + daily_count = await get_daily_user_deployment_count(user_id) + if daily_count >= DAILY_LIMIT and user_id not in ["U0AKCBZHHMH"]: + return { + "success": False, + "error": f"You've reached your daily limit of {DAILY_LIMIT} messages!" + } + + deployment_id = await create_deployment(user_id, message) + + print(f"DEBUG: Executing the deployment {deployment_id} on arrival - REMOVE THIS LATER!") + await execute_deployment(deployment_id) + + return { + "success": True, + "deployment_id": deployment_id, + "message": "Your message has been deployed!" + } + +async def execute_deployment(deployment_id: int): + deployment = await get_deployment(deployment_id) + if not deployment: + return + + users = await get_active_users() + message = deployment["message"] + + for user in users: + try: + client = AsyncWebClient(token=user["oauth_token"]) + response = await client.chat_postMessage( + channel="C0BGMV1CAQG", # put it in #botnet for now, make it detect recent thread with CM approval yada yada later + text=message, + as_user=True + ) + await add_deployment_message(deployment_id=deployment_id, user_id=user["slack_id"], channel_id="C0BGMV1CAQG", message_id=response["ts"]) + except Exception as e: + print(f"Failed to send #{deployment_id} on behalf of {user['slack_id']}: {e}") + + try: + client = AsyncWebClient(token=selfbot_token) + await client.chat_postMessage( + channel="C0BGMV1CAQG", + text=f"Deployment #{deployment_id} deployed.\n\nMessage: {message}", + as_user=True + ) + except Exception as e: + print(f"Failed to send deployment status message: {e}") + + await update_deployment_status(deployment_id, "deployed") -- cgit v1.2.3