diff --git a/wechatter/models/github/__init__.py b/wechatter/models/github/__init__.py index acb57a07..a39aee90 100644 --- a/wechatter/models/github/__init__.py +++ b/wechatter/models/github/__init__.py @@ -7,6 +7,7 @@ from .pr_review_webhook import GithubPrReviewWebhook from .pr_webhook import GithubPrWebhook from .push_webhook import GithubPushWebhook +from .release_webhook import GithubReleaseWebhook from .star_webhook import GithubStarWebhook __all__ = [ @@ -20,4 +21,5 @@ "GithubPrWebhook", "GithubPushWebhook", "GithubStarWebhook", + "GithubReleaseWebhook", ] diff --git a/wechatter/models/github/release_webhook.py b/wechatter/models/github/release_webhook.py new file mode 100644 index 00000000..5b9e9374 --- /dev/null +++ b/wechatter/models/github/release_webhook.py @@ -0,0 +1,27 @@ +from pydantic import BaseModel + +from wechatter.models.github.base import Repository, User + + +class Release(BaseModel): + url: str + assets_url: str + upload_url: str + html_url: str + author: User + body: str + tag_name: str + target_commitish: str + name: str + draft: bool + prerelease: bool + created_at: str + published_at: str + id: int + + +class GithubReleaseWebhook(BaseModel): + action: str + release: Release + repository: Repository + sender: User diff --git a/wechatter/models/wechat/message.py b/wechatter/models/wechat/message.py index 221f622e..36958c23 100644 --- a/wechatter/models/wechat/message.py +++ b/wechatter/models/wechat/message.py @@ -103,8 +103,8 @@ def from_api_msg( province=payload.get("province", ""), city=payload.get("city", ""), # phone_list=payload.get("phone", []), - is_star=payload.get("star", ""), - is_friend=payload.get("friend", ""), + is_star=payload.get("star", False), + is_friend=payload.get("friend", False), is_official_account=is_official_account, ) @@ -128,8 +128,8 @@ def from_api_msg( name=to_payload.get("name", ""), alias=to_payload.get("alias", ""), gender="unknown", - is_star=to_payload.get("star", ""), - is_friend=to_payload.get("friend", ""), + is_star=to_payload.get("star", False), + is_friend=to_payload.get("friend", False), ) _content = content.replace("\u2005", " ", 1) diff --git a/wechatter/webhook_handlers/github/__init__.py b/wechatter/webhook_handlers/github/__init__.py index df265a62..0ffb2240 100644 --- a/wechatter/webhook_handlers/github/__init__.py +++ b/wechatter/webhook_handlers/github/__init__.py @@ -7,6 +7,7 @@ from .pr_handler import handle_pr from .pr_review_handler import handle_pr_review from .push_handler import handle_push +from .release_handler import handle_release from .star_handler import handle_star __all__ = [ @@ -20,4 +21,5 @@ "handle_pr", "handle_push", "handle_star", + "handle_release", ] diff --git a/wechatter/webhook_handlers/github/release_handler.py b/wechatter/webhook_handlers/github/release_handler.py new file mode 100644 index 00000000..f3a1df70 --- /dev/null +++ b/wechatter/webhook_handlers/github/release_handler.py @@ -0,0 +1,25 @@ +from loguru import logger + +from wechatter.models.github import GithubReleaseWebhook +from wechatter.sender import sender +from wechatter.webhook_handlers.hanlders import github_webhook_handler + + +@github_webhook_handler("release") +def handle_release(data: dict): + payload = GithubReleaseWebhook(**data) + if payload.action != "published": + return + logger.info( + f"Release event on {payload.release.html_url} in repository {payload.repository.full_name}." + ) + message = ( + "== GitHub Release δΊ‹δ»Ά ==\n" + f"πŸš€ ζ–°ηš„η‰ˆζœ¬ε‘εΈƒδΊ†οΌ\n" + f"πŸ“š δ»“εΊ“οΌš{payload.repository.full_name}\n" + f"🏷️ η‰ˆζœ¬οΌš{payload.release.tag_name}\n" + f"πŸ§‘β€πŸ’» ζδΊ€θ€…οΌš{payload.sender.login}\n" + f"πŸ”— ζŸ₯ηœ‹θ―¦ζƒ…οΌš{payload.release.html_url}" + ) + + sender.mass_send_msg_to_github_webhook_receivers(message)