@@ -23,17 +23,25 @@ class DiscussionLike(Protocol):
23
23
category : DiscussionPropCategory
24
24
answer_html_url : str | None
25
25
state : Literal ["open" , "closed" , "locked" , "converting" , "transferring" ]
26
+ state_reason : Literal ["resolved" , "outdated" , "duplicate" , "reopened" ] | None
27
+
28
+
29
+ def get_discussion_emoji (discussion : DiscussionLike ) -> EmojiName :
30
+ emoji = "discussion"
31
+ if discussion .state_reason in ("outdated" , "duplicate" ):
32
+ emoji += "_" + discussion .state_reason
33
+ elif discussion .answer_html_url or discussion .state == "closed" :
34
+ emoji += "_answered"
35
+ return emoji
26
36
27
37
28
38
def discussion_footer (
29
39
discussion : DiscussionLike , * , emoji : EmojiName | None = None
30
40
) -> Footer :
31
- emoji = emoji or (
32
- "discussion_answered"
33
- if discussion .answer_html_url or discussion .state == "closed"
34
- else "discussion"
41
+ return Footer (
42
+ emoji or get_discussion_emoji (discussion ),
43
+ f"Discussion #{ discussion .number } : { discussion .title } " ,
35
44
)
36
- return Footer (emoji , f"Discussion #{ discussion .number } : { discussion .title } " )
37
45
38
46
39
47
def discussion_embed_content (
@@ -74,12 +82,11 @@ async def _(event: events.DiscussionClosed) -> None:
74
82
@webhook .event .discussion .reopened
75
83
async def _ (event : events .DiscussionReopened ) -> None :
76
84
discussion = event .discussion
77
- emoji = "discussion_answered" if discussion .answer_html_url else "discussion"
78
85
await send_embed (
79
86
bot ,
80
87
event .sender ,
81
88
discussion_embed_content (discussion , "reopened" ),
82
- discussion_footer (discussion , emoji = emoji ),
89
+ discussion_footer (discussion ),
83
90
color = "gray" ,
84
91
feed_type = "discussions" ,
85
92
)
@@ -104,25 +111,23 @@ async def _(event: events.DiscussionAnswered) -> None:
104
111
@webhook .event .discussion .unanswered
105
112
async def _ (event : events .DiscussionUnanswered ) -> None :
106
113
discussion = event .discussion
107
- emoji = "discussion_answered" if discussion .state == "closed" else "discussion"
108
114
await send_embed (
109
115
bot ,
110
116
event .sender or cast ("SimpleUser" , GitHubUser .default ()),
111
117
discussion_embed_content (discussion , "unmarked an answer for" ),
112
- discussion_footer (discussion , emoji = emoji ),
118
+ discussion_footer (discussion ),
113
119
color = "red" ,
114
120
feed_type = "discussions" ,
115
121
)
116
122
117
123
@webhook .event .discussion .locked
118
124
async def _ (event : events .DiscussionLocked ) -> None :
119
125
discussion = event .discussion
120
- emoji = "discussion_answered" if discussion .answer_html_url else "discussion"
121
126
await send_embed (
122
127
bot ,
123
128
event .sender ,
124
129
discussion_embed_content (discussion , "locked" ),
125
- discussion_footer (discussion , emoji = emoji ),
130
+ discussion_footer (discussion ),
126
131
color = "orange" ,
127
132
feed_type = "discussions" ,
128
133
)
0 commit comments