first commit

This commit is contained in:
EnvyPC 2024-04-16 08:36:46 +09:00
commit b9a75bd65a
9 changed files with 152 additions and 0 deletions

11
.gitignore vendored Normal file
View File

@ -0,0 +1,11 @@
__pycache__/
dist/
build/
Lib/
.vscode/
Include/
Scripts/
*.log
*.log.*
pyvenv.cfg

38
message_controller.py Normal file
View File

@ -0,0 +1,38 @@
from src.pushbullet import Pushbullet
from src.telegram import Telegram
from src.email import Email
from src.sms import SMS
from src.synology_chat import SynologyChat
from src.naver_line import NaverLine
import logging
logging.basicConfig(level=logging.INFO)
class MessageController:
def __init__(self, method, **credentials):
self.method = method.lower()
self.credentials = credentials
self.message_service = self.create_service()
def create_service(self):
if self.method == 'pushbullet':
return Pushbullet(self.credentials['access_token'])
elif self.method == 'telegram':
return Telegram(self.credentials['api_key'])
elif self.method == 'email':
return Email(self.credentials['user'], self.credentials['password'])
elif self.method == 'sms':
return SMS(self.credentials['api_key'])
elif self.method == 'synology_chat':
return SynologyChat(self.credentials['url'], self.credentials['token'])
elif self.method == 'naver_line':
return NaverLine(self.credentials['access_token'])
else:
raise ValueError("지원하지 않는 메시지 전송 방식입니다.")
def send_message(self, title, body):
print(f"{self.method.title()}를 통해 메시지를 보내는 중...")
self.message_service.send_message(title, body)
def test_message(self):
self.send_message("테스트 타이틀", "테스트 본문입니다.")

24
src/email.py Normal file
View File

@ -0,0 +1,24 @@
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
class Email:
def __init__(self, user, password, smtp_server='smtp.gmail.com', smtp_port=587):
self.user = user
self.password = password
self.smtp_server = smtp_server
self.smtp_port = smtp_port
def send_email(self, recipient, subject, body):
message = MIMEMultipart()
message['From'] = self.user
message['To'] = recipient
message['Subject'] = subject
message.attach(MIMEText(body, 'plain'))
with smtplib.SMTP(self.smtp_server, self.smtp_port) as server:
server.starttls()
server.login(self.user, self.password)
server.send_message(message)
print(f"Email 전송 완료: {subject} to {recipient}")

16
src/naver_line.py Normal file
View File

@ -0,0 +1,16 @@
import requests
class NaverLine:
def __init__(self, access_token):
self.access_token = access_token
def send_message(self, message):
headers = {
'Authorization': f'Bearer {self.access_token}'
}
data = {
'message': message
}
response = requests.post("https://notify-api.line.me/api/notify", headers=headers, data=data)
response.raise_for_status()
print(f"LINE 메시지 전송 완료: {message}")

15
src/pushbullet.py Normal file
View File

@ -0,0 +1,15 @@
import requests
class Pushbullet:
def __init__(self, access_token):
self.access_token = access_token
print("Pushbullet 인스턴스가 생성되었습니다.")
def send_message(self, title, body):
data = {"type": "note", "title": title, "body": body}
response = requests.post('https://api.pushbullet.com/v2/pushes',
data=data,
headers={'Access-Token': self.access_token})
if response.status_code != 200:
raise Exception("Pushbullet 메시지 전송 실패")
print("Pushbullet 메시지 전송 성공")

13
src/sms.py Normal file
View File

@ -0,0 +1,13 @@
from twilio.rest import Client
class SMS:
def __init__(self, account_sid, auth_token):
self.client = Client(account_sid, auth_token)
def send_sms(self, from_number, to_number, message):
self.client.messages.create(
to=to_number,
from_=from_number,
body=message
)
print(f"SMS 전송 완료: {message} to {to_number}")

11
src/synology_chat.py Normal file
View File

@ -0,0 +1,11 @@
import requests
class SynologyChat:
def __init__(self, webhook_url):
self.webhook_url = webhook_url
def send_message(self, message):
payload = {'text': message}
response = requests.post(self.webhook_url, json=payload)
response.raise_for_status()
print(f"시놀로지 Chat 메시지 전송 완료: {message}")

16
src/telegram.py Normal file
View File

@ -0,0 +1,16 @@
import requests
class Telegram:
def __init__(self, api_key, chat_id):
self.api_key = api_key
self.chat_id = chat_id
def send_message(self, text):
url = f"https://api.telegram.org/bot{self.api_key}/sendMessage"
payload = {
"chat_id": self.chat_id,
"text": text
}
response = requests.post(url, json=payload)
response.raise_for_status()
print(f"Telegram 메시지 전송 완료: {text}")

8
test.py Normal file
View File

@ -0,0 +1,8 @@
from message_controller import MessageController
def test_pushbullet():
mc = MessageController('pushbullet', access_token='your_access_token')
mc.test_message()
if __name__ == "__main__":
test_pushbullet()