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")
|