Skip to content

Commit 5d7463a

Browse files
authored
✨ add message and type
1 parent 6ef84f9 commit 5d7463a

File tree

4 files changed

+151
-3
lines changed

4 files changed

+151
-3
lines changed

codegen/__init__.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,21 @@
88
from githubkit.webhooks.models import GitHubWebhookModel
99
from githubkit.webhooks.types import webhook_action_types
1010

11+
MESSAGE_EVENTS = {
12+
"CommitCommentCreated",
13+
"IssueCommentCreated",
14+
"PullRequestReviewCommentCreated",
15+
}
16+
HAS_MESSAGE_EVENTS = {
17+
"CommitCommentCreated",
18+
"IssueCommentCreated",
19+
"IssueCommentDeleted",
20+
"IssueCommentEdited",
21+
"PullRequestReviewCommentCreated",
22+
"PullRequestReviewCommentDeleted",
23+
"PullRequestReviewCommentEdited",
24+
}
25+
1126

1227
@dataclass
1328
class Data:
@@ -45,5 +60,10 @@ def build_event():
4560

4661
env = Environment(loader=PackageLoader("codegen"))
4762
template = env.get_template("event.py.jinja")
48-
event_text = template.render(imports=imports, events=events)
63+
event_text = template.render(
64+
imports=imports,
65+
events=events,
66+
message_events=MESSAGE_EVENTS,
67+
has_message_events=HAS_MESSAGE_EVENTS,
68+
)
4969
Path("./nonebot/adapters/github/event.py").write_text(event_text)

codegen/templates/event.py.jinja

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
11
from typing import Any, Union
2+
from functools import cached_property
23

34
{% for import_ in imports %}
45
from githubkit.webhooks.models import {{ import_ }}
56
{% endfor %}
6-
from githubkit.utils import UNSET
77
from nonebot.typing import overrides
88
from nonebot.utils import escape_tag
99

1010
from nonebot.adapters import Event as BaseEvent
1111

12+
from .message import Message
13+
1214

1315
class Event(BaseEvent):
1416
id: str
@@ -67,4 +69,21 @@ class Event(BaseEvent):
6769
class {{ event.class_name }}(Event):
6870
payload: {{ event.payload_type }}
6971

72+
{% if event.class_name in message_events %}
73+
@overrides(Event)
74+
def get_type(self) -> str:
75+
return "message"
76+
{% endif %}
77+
78+
{% if event.class_name in has_message_events %}
79+
@cached_property
80+
def _message(self):
81+
return Message(self.payload.comment.body)
82+
83+
84+
@overrides(Event)
85+
def get_message(self):
86+
return self._message
87+
88+
{% endif %}
7089
{% endfor %}

nonebot/adapters/github/event.py

Lines changed: 71 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from typing import Any, Union
2+
from functools import cached_property
23

3-
from githubkit.utils import UNSET
44
from nonebot.typing import overrides
55
from nonebot.utils import escape_tag
66
from githubkit.webhooks.models import ForkEvent as ForkEventPayload
@@ -379,6 +379,8 @@
379379

380380
from nonebot.adapters import Event as BaseEvent
381381

382+
from .message import Message
383+
382384

383385
class Event(BaseEvent):
384386
id: str
@@ -551,6 +553,18 @@ class CodeScanningAlertReopenedByUser(Event):
551553
class CommitCommentCreated(Event):
552554
payload: CommitCommentCreatedPayload
553555

556+
@overrides(Event)
557+
def get_type(self) -> str:
558+
return "message"
559+
560+
@cached_property
561+
def _message(self):
562+
return Message(self.payload.comment.body)
563+
564+
@overrides(Event)
565+
def get_message(self):
566+
return self._message
567+
554568

555569
class DeployKeyCreated(Event):
556570
payload: DeployKeyCreatedPayload
@@ -667,14 +681,42 @@ class InstallationRepositoriesRemoved(Event):
667681
class IssueCommentCreated(Event):
668682
payload: IssueCommentCreatedPayload
669683

684+
@overrides(Event)
685+
def get_type(self) -> str:
686+
return "message"
687+
688+
@cached_property
689+
def _message(self):
690+
return Message(self.payload.comment.body)
691+
692+
@overrides(Event)
693+
def get_message(self):
694+
return self._message
695+
670696

671697
class IssueCommentDeleted(Event):
672698
payload: IssueCommentDeletedPayload
673699

700+
@cached_property
701+
def _message(self):
702+
return Message(self.payload.comment.body)
703+
704+
@overrides(Event)
705+
def get_message(self):
706+
return self._message
707+
674708

675709
class IssueCommentEdited(Event):
676710
payload: IssueCommentEditedPayload
677711

712+
@cached_property
713+
def _message(self):
714+
return Message(self.payload.comment.body)
715+
716+
@overrides(Event)
717+
def get_message(self):
718+
return self._message
719+
678720

679721
class IssuesAssigned(Event):
680722
payload: IssuesAssignedPayload
@@ -1021,14 +1063,42 @@ class PullRequestReviewSubmitted(Event):
10211063
class PullRequestReviewCommentCreated(Event):
10221064
payload: PullRequestReviewCommentCreatedPayload
10231065

1066+
@overrides(Event)
1067+
def get_type(self) -> str:
1068+
return "message"
1069+
1070+
@cached_property
1071+
def _message(self):
1072+
return Message(self.payload.comment.body)
1073+
1074+
@overrides(Event)
1075+
def get_message(self):
1076+
return self._message
1077+
10241078

10251079
class PullRequestReviewCommentDeleted(Event):
10261080
payload: PullRequestReviewCommentDeletedPayload
10271081

1082+
@cached_property
1083+
def _message(self):
1084+
return Message(self.payload.comment.body)
1085+
1086+
@overrides(Event)
1087+
def get_message(self):
1088+
return self._message
1089+
10281090

10291091
class PullRequestReviewCommentEdited(Event):
10301092
payload: PullRequestReviewCommentEditedPayload
10311093

1094+
@cached_property
1095+
def _message(self):
1096+
return Message(self.payload.comment.body)
1097+
1098+
@overrides(Event)
1099+
def get_message(self):
1100+
return self._message
1101+
10321102

10331103
class PullRequestReviewThreadResolved(Event):
10341104
payload: PullRequestReviewThreadResolvedPayload

nonebot/adapters/github/message.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from typing import Type, Iterable
2+
3+
from nonebot.typing import overrides
4+
5+
from nonebot.adapters import Message as BaseMessage
6+
from nonebot.adapters import MessageSegment as BaseMessageSegment
7+
8+
9+
class MessageSegment(BaseMessageSegment["Message"]):
10+
@classmethod
11+
@overrides(BaseMessageSegment)
12+
def get_message_class(cls) -> Type["Message"]:
13+
return Message
14+
15+
@overrides(BaseMessageSegment)
16+
def __str__(self) -> str:
17+
if self.type == "markdown":
18+
return self.data["text"]
19+
return f"<{self.type}:{','.join(f'{k}={v}' for k, v in self.data.items())}>"
20+
21+
@overrides(BaseMessageSegment)
22+
def is_text(self) -> bool:
23+
return self.type == "markdown"
24+
25+
@staticmethod
26+
def markdown(text: str) -> "MessageSegment":
27+
return MessageSegment("markdown", {"text": text})
28+
29+
30+
class Message(BaseMessage[MessageSegment]):
31+
@classmethod
32+
@overrides(BaseMessage)
33+
def get_segment_class(cls) -> Type[MessageSegment]:
34+
return MessageSegment
35+
36+
@staticmethod
37+
@overrides(BaseMessage)
38+
def _construct(msg: str) -> Iterable[MessageSegment]:
39+
yield MessageSegment.markdown(msg)

0 commit comments

Comments
 (0)