aboutsummaryrefslogtreecommitdiff
path: root/src/botnet.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/botnet.py')
-rw-r--r--src/botnet.py67
1 files changed, 67 insertions, 0 deletions
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")