diff --git a/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/GitHubPosts.cs b/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/GitHubPosts.cs index b14fad9..6677f55 100644 --- a/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/GitHubPosts.cs +++ b/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/GitHubPosts.cs @@ -7,8 +7,6 @@ namespace HuaJiBot.NET.Plugin.GitHubBridge.EventDispatch; internal static class GitHubPosts { - internal const int ExcerptLimit = 280; - internal static Post Issue( IssuesEventBody body, Func> card, @@ -51,23 +49,6 @@ Func> fallback Links = [new("查看改动", body.Compare.ToString())], }; - internal static string? Excerpt(string? body) - { - if (body is null) - return null; - var text = body.ReplaceLineEndings("\n").Trim(); - var lines = text.Split('\n'); - if (lines.Length <= 6 && text.Length <= ExcerptLimit) - return text; - var head = string.Join('\n', lines.Take(3)); - if (lines.Length > 3 && head.Length < ExcerptLimit) - return head + '…'; - var end = ExcerptLimit - 1; - if (char.IsLowSurrogate(head[end])) - end--; - return head[..end] + '…'; - } - private static string Verb(string action) => action switch { diff --git a/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/IssuesEventDispatcher.cs b/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/IssuesEventDispatcher.cs index afedde1..ed828fc 100644 --- a/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/IssuesEventDispatcher.cs +++ b/src/HuaJiBot.NET.Plugin.GitHubBridge/EventDispatch/IssuesEventDispatcher.cs @@ -27,12 +27,13 @@ IssueCommentEventBody body if (!ShouldBroadcast(body)) return; using Cards cards = new(); + var card = cards.Card(() => BuildCommentCardAsync(body)); var post = GitHubPosts.Comment( body, - cards.Card(() => BuildCommentCardAsync(body, GitHubPosts.Excerpt(body.Comment.Body))), + card, Cards.Once(async () => [ - new ImageMessage(await cards.Card(() => BuildCommentCardAsync(body, body.Comment.Body))()), + new ImageMessage(await card()), new LinkMessage("View comment", await plugin.OrRawAsync(body.Issue.HtmlUrl)), ] ) @@ -51,12 +52,13 @@ public static async Task DispatchIssuesEventAsync(this PluginMain plugin, Issues if (!ShouldBroadcast(body)) return; using Cards cards = new(); + var card = cards.Card(() => BuildIssueCardAsync(body)); var post = GitHubPosts.Issue( body, - cards.Card(() => BuildIssueCardAsync(body, GitHubPosts.Excerpt(body.Issue.Body))), + card, Cards.Once(async () => [ - new ImageMessage(await cards.Card(() => BuildIssueCardAsync(body, body.Issue.Body))()), + new ImageMessage(await card()), new LinkMessage( $"Open #{body.Issue.Number}", await plugin.OrRawAsync(body.Issue.HtmlUrl) @@ -71,29 +73,23 @@ await Broadcast.SendAsync( ); } - private static Task BuildCommentCardAsync( - IssueCommentEventBody body, - string? content - ) => + private static Task BuildCommentCardAsync(IssueCommentEventBody body) => BuildCardAsync( body.Repository, body.Issue, body.Sender, body.Issue.State, - content, + body.Comment.Body, $"@{body.Sender.Login} {body.Action} comment." ); - private static Task BuildIssueCardAsync( - IssuesEventBody body, - string? content - ) => + private static Task BuildIssueCardAsync(IssuesEventBody body) => BuildCardAsync( body.Repository, body.Issue, body.Sender, body.Action is "opened" or "reopened" ? "open" : body.Action, - content, + body.Issue.Body, $"@{body.Sender.Login} {body.Action} issue" ); diff --git a/src/HuaJiBot.NET.UnitTest/GitHubPostTest.cs b/src/HuaJiBot.NET.UnitTest/GitHubPostTest.cs index 1b2f482..5b9a51d 100644 --- a/src/HuaJiBot.NET.UnitTest/GitHubPostTest.cs +++ b/src/HuaJiBot.NET.UnitTest/GitHubPostTest.cs @@ -89,23 +89,4 @@ public void Push_CountsCommitsOnBranch() Assert.That(post.Links.Single(), Is.EqualTo(new LinkMessage("查看改动", "https://github.com/nbtca/HuaJiBot.NET/compare/a...b"))); }); } - - [Test] - public void Excerpt_KeepsShortBody() => - Assert.That(GitHubPosts.Excerpt("one\ntwo"), Is.EqualTo("one\ntwo")); - - [Test] - public void Excerpt_CutsManyLinesToThree() => - Assert.That(GitHubPosts.Excerpt("1\n2\n3\n4\n5\n6\n7"), Is.EqualTo("1\n2\n3…")); - - [Test] - public void Excerpt_CutsLongParagraph() - { - var excerpt = GitHubPosts.Excerpt(new string('a', 500))!; - Assert.Multiple(() => - { - Assert.That(excerpt, Has.Length.EqualTo(GitHubPosts.ExcerptLimit)); - Assert.That(excerpt, Does.EndWith("…")); - }); - } }