-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ironalerts.pyw
101 lines (80 loc) · 3.07 KB
/
ironalerts.pyw
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import os
import imaplib
import email
import re
import requests
import time
from bs4 import BeautifulSoup
from dotenv import load_dotenv
load_dotenv()
def create_alert(name, amount):
url = "https://streamlabs.com/api/v2.0/alerts"
access_token = os.environ.get("STREAMLABS_ACCESS_TOKEN")
headers = {
"Authorization": f"Bearer {access_token}"
}
data = {
"type": "donation",
"message": f"{name} donated {amount} towards the Iron Phi campaign!",
"duration": "3000",
"special_text_color": "Orange"
}
response = requests.post(url, headers=headers, json=data)
print(f'Request URL: {response.url}')
print(f'Status Code: {response.status_code}')
print(f'Response: {response.text}')
if response.status_code == 200:
try:
return response.json()
except requests.exceptions.JSONDecodeError:
print('Failed to decode JSON from response.')
return None
else:
print('Received non-200 status code.')
return None
# Email server settings
HOST = '127.0.0.1'
PORT = 1143
USERNAME = os.environ.get('ENV_EMAIL')
PASSWORD = os.environ.get('ENV_EMAIL_PW')
SENDER = '[email protected]'
while True:
alert_count = 0
mail = imaplib.IMAP4(HOST, PORT)
mail.starttls()
mail.login(USERNAME, PASSWORD)
mail.select('inbox')
status, messages = mail.search(None, f'(FROM "{SENDER}")')
print(f'Search status: {status}, Messages: {messages}') # Debug print for email search
if status == 'OK':
for num in messages[0].split():
status, data = mail.fetch(num, '(RFC822)')
if status == 'OK':
msg = email.message_from_bytes(data[0][1])
body = None
if msg.is_multipart():
for part in msg.walk():
if part.get_content_type() == "text/html":
body = part.get_payload(decode=True).decode('utf-8')
break
else:
body = msg.get_payload(decode=True).decode('utf-8')
if body:
soup = BeautifulSoup(body, 'html.parser')
text_content = soup.get_text() # Get the plain text content of the email
name_match = re.search(r"Name:\s*(.+)", text_content)
amount_match = re.search(r"Amount:\s*(.+)", text_content)
if name_match and amount_match:
name = name_match.group(1).strip()
amount = amount_match.group(1).strip()
print(f'Extracted Name: {name}, Amount: {amount}') # Debug print for extracted data
# Create an alert using Streamlabs API v2.0
create_alert(name, amount)
alert_count += 1
# Mark email for deletion
mail.store(num, '+FLAGS', '\\Deleted')
mail.expunge()
mail.close()
mail.logout()
print(f'{alert_count} alerts sent.')
time.sleep(30)