notice.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. return PushMessage(
  30. title="新邮件通知",
  31. content=f'您有一封来自[{email["sender_name"] if email["sender_name"] else email["sender_email"]}]的邮件',
  32. messageType=MessageType.EMAIL,
  33. email=Email(
  34. sender=sender_display,
  35. recipient=recipient_display,
  36. subject=email['subject'],
  37. sendTime=email['date'],
  38. content=email['content'],
  39. )
  40. )
  41. class Push:
  42. def __init__(self, config: dict):
  43. self.config = config
  44. def send_notification(self, data: PushMessage):
  45. pass
  46. class AiYuFeiFei(Push):
  47. def __init__(self, config: dict):
  48. super().__init__(config)
  49. self.url = f'https://iyuu.cn/{config["token"]}.send'
  50. def send_notification(self, data: PushMessage):
  51. data = {
  52. 'text': data.title,
  53. 'desp': data.content
  54. }
  55. response = requests.post(self.url, json=data)
  56. print("爱语飞飞提醒发送结果:", response.json())
  57. class Yo(Push):
  58. def __init__(self, config: dict):
  59. super().__init__(config)
  60. def send_notification(self, data: PushMessage):
  61. headers = {
  62. 'x-api-key': self.config['token']
  63. }
  64. response = requests.post(self.config['url'], json=data.model_dump(), headers=headers)
  65. print("Yo提醒发送结果:", response.json())
  66. class PushFactory:
  67. @staticmethod
  68. def create_push(config: dict) -> Push:
  69. if config['type'] == 'Yo':
  70. return Yo(config)
  71. elif config['type'] == 'AiYuFeiFei':
  72. return AiYuFeiFei(config)
  73. else:
  74. raise ValueError(f'不支持的推送类型: {config.type}')