notice.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import requests
  2. from pydantic import BaseModel, Field
  3. from enum import Enum
  4. class MessageType(Enum):
  5. DEFAULT = 'DEFAULT',
  6. TEXT = 'TEXT',
  7. MARKDOWN = 'MARKDOWN',
  8. EMAIL = 'EMAIL'
  9. class Email(BaseModel):
  10. sender: str = Field(..., description='发件人')
  11. recipient: str = Field(..., description='收件人')
  12. subject: str = Field(..., description='主题')
  13. sendTime: str = Field(..., description='发送时间')
  14. content: str = Field(..., description='内容')
  15. class PushMessage(BaseModel):
  16. title: str = Field(..., description='标题')
  17. content: str = Field(..., description='通知内容')
  18. messageType: MessageType = Field(..., description='消息类型')
  19. text: str = Field(None, description='文本内容')
  20. email: Email = Field(None, description='邮件内容')
  21. def model_dump(self):
  22. # 重写model_dump方法以正确处理枚举类型
  23. data = super().model_dump()
  24. data['messageType'] = self.messageType.value
  25. return data
  26. def from_email(email: dict):
  27. sender_display = email["sender"].replace(' ', '\n').replace('"', '')
  28. recipient_display = email["recipient"].replace(' ', '\n')
  29. print("邮件内容:", email)
  30. return PushMessage(
  31. title="新邮件通知",
  32. content=f'您有一封来自[{email["sender_name"] if email["sender_name"] else email["sender_email"]}]的邮件',
  33. messageType=MessageType.EMAIL,
  34. email=Email(
  35. sender=sender_display,
  36. recipient=recipient_display,
  37. subject=email['subject'],
  38. sendTime=email['date'],
  39. content=email['content'],
  40. )
  41. )
  42. class Push:
  43. def __init__(self, config: dict):
  44. self.config = config
  45. def send_notification(self, data: PushMessage):
  46. pass
  47. class AiYuFeiFei(Push):
  48. def __init__(self, config: dict):
  49. super().__init__(config)
  50. self.url = f'https://iyuu.cn/{config["token"]}.send'
  51. def send_notification(self, data: PushMessage):
  52. data = {
  53. 'text': data.title,
  54. 'desp': data.content
  55. }
  56. response = requests.post(self.url, json=data)
  57. print("爱语飞飞提醒发送结果:", response.json())
  58. class Yo(Push):
  59. def __init__(self, config: dict):
  60. super().__init__(config)
  61. def send_notification(self, data: PushMessage):
  62. headers = {
  63. 'x-api-key': self.config['token']
  64. }
  65. response = requests.post(self.config['url'], json=data.model_dump(), headers=headers)
  66. print("Yo提醒发送结果:", response.json())
  67. class PushFactory:
  68. @staticmethod
  69. def create_push(config: dict) -> Push:
  70. if config['type'] == 'Yo':
  71. return Yo(config)
  72. elif config['type'] == 'AiYuFeiFei':
  73. return AiYuFeiFei(config)
  74. else:
  75. raise ValueError(f'不支持的推送类型: {config.type}')