aboutsummaryrefslogtreecommitdiff
path: root/src/botnet.py
blob: 46b59d54521e5403bc2c13b09c792a9af4760986 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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")