commit b9a75bd65a1c2546acd05bc1d67d2a1667fa5275 Author: EnvyPC Date: Tue Apr 16 08:36:46 2024 +0900 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bf69527 --- /dev/null +++ b/.gitignore @@ -0,0 +1,11 @@ + +__pycache__/ +dist/ +build/ +Lib/ +.vscode/ +Include/ +Scripts/ +*.log +*.log.* +pyvenv.cfg diff --git a/message_controller.py b/message_controller.py new file mode 100644 index 0000000..5cb9567 --- /dev/null +++ b/message_controller.py @@ -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("테스트 타이틀", "테스트 본문입니다.") diff --git a/src/email.py b/src/email.py new file mode 100644 index 0000000..bdf6ea8 --- /dev/null +++ b/src/email.py @@ -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}") diff --git a/src/naver_line.py b/src/naver_line.py new file mode 100644 index 0000000..31cf140 --- /dev/null +++ b/src/naver_line.py @@ -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}") diff --git a/src/pushbullet.py b/src/pushbullet.py new file mode 100644 index 0000000..aff9642 --- /dev/null +++ b/src/pushbullet.py @@ -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 메시지 전송 성공") diff --git a/src/sms.py b/src/sms.py new file mode 100644 index 0000000..74788c9 --- /dev/null +++ b/src/sms.py @@ -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}") diff --git a/src/synology_chat.py b/src/synology_chat.py new file mode 100644 index 0000000..ce6ecf5 --- /dev/null +++ b/src/synology_chat.py @@ -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}") diff --git a/src/telegram.py b/src/telegram.py new file mode 100644 index 0000000..6d44197 --- /dev/null +++ b/src/telegram.py @@ -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}") diff --git a/test.py b/test.py new file mode 100644 index 0000000..bb5fffb --- /dev/null +++ b/test.py @@ -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()