| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- import requests
- from pydantic import BaseModel, Field
- from enum import Enum
- class MessageType(Enum):
- DEFAULT = 'DEFAULT',
- TEXT = 'TEXT',
- MARKDOWN = 'MARKDOWN',
- EMAIL = 'EMAIL'
- class Email(BaseModel):
- sender: str = Field(..., description='发件人')
- recipient: str = Field(..., description='收件人')
- subject: str = Field(..., description='主题')
- sendTime: str = Field(..., description='发送时间')
- content: str = Field(..., description='内容')
- class PushMessage(BaseModel):
- title: str = Field(..., description='标题')
- content: str = Field(..., description='通知内容')
- messageType: MessageType = Field(..., description='消息类型')
- text: str = Field(None, description='文本内容')
- email: Email = Field(None, description='邮件内容')
- def model_dump(self):
- # 重写model_dump方法以正确处理枚举类型
- data = super().model_dump()
- data['messageType'] = self.messageType.value
- return data
- def from_email(email: dict):
- sender_display = email["sender"].replace(' ', '\n').replace('"', '')
- recipient_display = email["recipient"].replace(' ', '\n')
- return PushMessage(
- title="新邮件通知",
- content=f'您有一封来自[{email["sender_name"] if email["sender_name"] else email["sender_email"]}]的邮件',
- messageType=MessageType.EMAIL,
- email=Email(
- sender=sender_display,
- recipient=recipient_display,
- subject=email['subject'],
- sendTime=email['date'],
- content=email['content'],
- )
- )
- class Push:
- def __init__(self, config: dict):
- self.config = config
- def send_notification(self, data: PushMessage):
- pass
- class AiYuFeiFei(Push):
- def __init__(self, config: dict):
- super().__init__(config)
- self.url = f'https://iyuu.cn/{config["token"]}.send'
- def send_notification(self, data: PushMessage):
- data = {
- 'text': data.title,
- 'desp': data.content
- }
- response = requests.post(self.url, json=data)
- print("爱语飞飞提醒发送结果:", response.json())
- class Yo(Push):
- def __init__(self, config: dict):
- super().__init__(config)
- def send_notification(self, data: PushMessage):
- headers = {
- 'x-api-key': self.config['token']
- }
- response = requests.post(self.config['url'], json=data.model_dump(), headers=headers)
- print("Yo提醒发送结果:", response.json())
- class PushFactory:
- @staticmethod
- def create_push(config: dict) -> Push:
- if config['type'] == 'Yo':
- return Yo(config)
- elif config['type'] == 'AiYuFeiFei':
- return AiYuFeiFei(config)
- else:
- raise ValueError(f'不支持的推送类型: {config.type}')
|