Skip to content

Commit 6253f97

Browse files
committed
Send PR embed if a PR number is passed to /gh issue
1 parent 3e1e4b8 commit 6253f97

File tree

2 files changed

+41
-10
lines changed

2 files changed

+41
-10
lines changed

bot/src/ghutils/cogs/app_commands/github.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from discord.ui import Button, View
1515
from githubkit import GitHub
1616
from githubkit.exception import GitHubException
17-
from githubkit.rest import Issue, PullRequest, SimpleUser
17+
from githubkit.rest import Issue, IssuePropPullRequest, PullRequest, SimpleUser
1818
from more_itertools import consecutive_groups, ilen
1919
from yarl import URL
2020

@@ -397,12 +397,13 @@ def _discord_date(timestamp: int | float | datetime):
397397

398398
def _create_issue_embed(repo: RepositoryName, issue: Issue | PullRequest):
399399
match issue:
400+
case Issue(pull_request=IssuePropPullRequest()) | PullRequest():
401+
issue_type = "PR"
402+
state = PullRequestState.of(issue)
403+
assert state
400404
case Issue():
401405
issue_type = "Issue"
402406
state = IssueState.of(issue)
403-
case PullRequest():
404-
issue_type = "PR"
405-
state = PullRequestState.of(issue)
406407

407408
embed = Embed(
408409
title=truncate_str(f"[{issue_type} #{issue.number}] {issue.title}", 256),

bot/src/ghutils/utils/github.py

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
from __future__ import annotations
22

33
from dataclasses import dataclass
4+
from datetime import datetime
45
from enum import Enum, auto
56
from functools import cached_property
6-
from typing import Any, Awaitable, Callable, List, Self, cast
7+
from typing import Any, Awaitable, Callable, List, Self, cast, overload
78

89
from discord import Color
910
from githubkit import Paginator, Response
10-
from githubkit.rest import Issue, PullRequest
11+
from githubkit.rest import Issue, IssuePropPullRequest, PullRequest
1112

1213

1314
class IssueState(Enum):
@@ -42,15 +43,38 @@ class PullRequestState(Enum):
4243
MERGED = auto()
4344
CLOSED = auto()
4445

46+
@overload
4547
@classmethod
46-
def of(cls, pr: PullRequest) -> PullRequestState:
48+
def of(cls, pr: Issue) -> PullRequestState | None: ...
49+
50+
@overload
51+
@classmethod
52+
def of(cls, pr: PullRequest) -> PullRequestState: ...
53+
54+
@classmethod
55+
def of(cls, pr: Issue | PullRequest) -> PullRequestState | None:
4756
match pr:
48-
case PullRequest(state="open", draft=True):
57+
case Issue() if not pr.pull_request:
58+
return None
59+
60+
case (
61+
Issue(state="open", draft=True)
62+
| PullRequest(state="open", draft=True)
63+
):
4964
return PullRequestState.DRAFT
50-
case PullRequest(state="open"):
65+
66+
case Issue(state="open") | PullRequest(state="open"):
5167
return PullRequestState.OPEN
52-
case PullRequest(state="closed", merged=True):
68+
69+
case (
70+
Issue(
71+
state="closed",
72+
pull_request=IssuePropPullRequest(merged_at=datetime()),
73+
)
74+
| PullRequest(state="closed", merged=True)
75+
):
5376
return PullRequestState.MERGED
77+
5478
case _:
5579
return PullRequestState.CLOSED
5680

@@ -179,3 +203,9 @@ async def gh_request[T](future: Awaitable[Response[T]]) -> T:
179203

180204
def shorten_sha(sha: str):
181205
return sha[:10]
206+
207+
208+
def issue_or_pr_state(issue: Issue | PullRequest) -> IssueState | PullRequestState:
209+
if isinstance(issue, PullRequest):
210+
return PullRequestState.of(issue)
211+
return PullRequestState.of(issue) or IssueState.of(issue)

0 commit comments

Comments
 (0)