Refactor code structure for improved readability and maintainability
This commit is contained in:
parent
efb320eb05
commit
e078cada3b
11 changed files with 1640 additions and 1184 deletions
68
modules/notifications.py
Normal file
68
modules/notifications.py
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
"""
|
||||
Email notification functionality for Twitch Archive.
|
||||
"""
|
||||
|
||||
import os
|
||||
import socket
|
||||
import smtplib
|
||||
from email.mime.multipart import MIMEMultipart
|
||||
from email.mime.text import MIMEText
|
||||
from colorama import Fore, Style
|
||||
|
||||
|
||||
class NotificationManager:
|
||||
"""Handles email notifications via Gmail SMTP."""
|
||||
|
||||
def __init__(self, enabled: bool = False, username: str = ""):
|
||||
"""
|
||||
Initialize the notification manager.
|
||||
|
||||
Args:
|
||||
enabled: Whether notifications are enabled
|
||||
username: Streamer username for notification subject
|
||||
"""
|
||||
self.enabled = enabled
|
||||
self.username = username
|
||||
|
||||
def send(self, subject: str, content: str) -> None:
|
||||
"""
|
||||
Send email notification via Gmail SMTP.
|
||||
|
||||
Only sends if notifications are enabled in configuration.
|
||||
Requires SENDER, RECEIVER, and PASSWD in .env file.
|
||||
|
||||
Args:
|
||||
subject: Email subject line
|
||||
content: Email body content
|
||||
"""
|
||||
if not self.enabled:
|
||||
return
|
||||
|
||||
try:
|
||||
sender = os.getenv("SENDER")
|
||||
receiver = os.getenv("RECEIVER")
|
||||
password = os.getenv("PASSWD")
|
||||
|
||||
if not all([sender, receiver, password]):
|
||||
print(f'{Fore.YELLOW}⚠ Notification skipped: Missing email credentials in .env{Style.RESET_ALL}')
|
||||
return
|
||||
|
||||
# Construct email
|
||||
msg = MIMEMultipart()
|
||||
msg['From'] = sender
|
||||
msg['To'] = receiver
|
||||
msg['Subject'] = f"{self.username} - {subject}"
|
||||
|
||||
body = f"Stream: {self.username}\n\n{content}"
|
||||
msg.attach(MIMEText(body, 'plain'))
|
||||
|
||||
# Send via Gmail SMTP
|
||||
with smtplib.SMTP('smtp.gmail.com', 587) as server:
|
||||
server.starttls()
|
||||
server.login(sender, password)
|
||||
server.sendmail(sender, receiver, msg.as_string())
|
||||
|
||||
except socket.error as e:
|
||||
print(f'{Fore.YELLOW}⚠ Notification failed: {str(e)}{Style.RESET_ALL}')
|
||||
except Exception as e:
|
||||
print(f'{Fore.YELLOW}⚠ Notification error: {str(e)}{Style.RESET_ALL}')
|
||||
Loading…
Add table
Add a link
Reference in a new issue