1- using Octokit ;
1+ using System . Text ;
2+ using Octokit ;
23using SlackNet . Interaction ;
34
45namespace Slack_GPT_Socket . Command ;
@@ -35,15 +36,57 @@ public async Task<SlashCommandResponse> Execute(SlashCommand command)
3536 ? Application . VersionString
3637 : versionString ;
3738
38- var latestRelease = releases . FirstOrDefault ( r => r . TagName == currentVersion ) ;
39+ var latestRelease = releases . FirstOrDefault ( ) ;
40+ var latestVersion = latestRelease ? . TagName ;
41+ var currentRelease = releases . FirstOrDefault ( r => r . TagName == currentVersion ) ;
42+ var releaseNotes = new StringBuilder ( ) ;
3943
40- if ( latestRelease == null )
41- return CommandStrategyUtils . SlashCommandResponse ( $ "No release found for current version. { currentVersion } ") ;
44+ if ( currentRelease == null )
45+ {
46+ releaseNotes . AppendLine ( "You are running an *unknown version* of the bot." ) ;
47+ releaseNotes . AppendLine ( "Please update to the latest version." ) ;
48+ releaseNotes . AppendLine ( ) ;
49+ releaseNotes . AppendLine ( $ "Current version: { Application . VersionString } ") ;
50+ releaseNotes . AppendLine ( $ "Latest version: { latestVersion } ") ;
51+ releaseNotes . AppendLine ( ) ;
52+ }
4253
43- return CommandStrategyUtils . SlashCommandResponse (
44- $ "*Whats new: { latestRelease . Name } *\n " +
45- $ "{ latestRelease . Body } \n " +
46- $ "\n " +
47- $ "\t { latestRelease . HtmlUrl } ") ;
54+ var currentMajorMinor = currentVersion . Substring ( 0 , currentVersion . LastIndexOf ( '.' ) ) ;
55+ var latestMajorMinor = latestVersion . Substring ( 0 , latestVersion . LastIndexOf ( '.' ) ) ;
56+
57+ var relevantReleases = releases
58+ . Where ( r => r . TagName . StartsWith ( currentMajorMinor ) )
59+ . OrderByDescending ( r => r . TagName )
60+ . ToList ( ) ;
61+
62+
63+ if ( currentMajorMinor != latestMajorMinor )
64+ {
65+ releaseNotes . AppendLine ( "*New Update!*" ) ;
66+ foreach ( var release in releases . Where ( r => r . TagName . StartsWith ( latestMajorMinor ) ) . OrderByDescending ( r => r . TagName ) )
67+ {
68+ releaseNotes . AppendLine ( $ "{ release . TagName } ") ;
69+ releaseNotes . AppendLine ( $ "{ release . Body } ") ;
70+ releaseNotes . AppendLine ( ) ;
71+ releaseNotes . AppendLine ( $ "\t { release . HtmlUrl } ") ;
72+ }
73+
74+ releaseNotes . AppendLine ( ) ;
75+ releaseNotes . AppendLine ( "*Whats new - current version*" ) ;
76+ }
77+ else
78+ {
79+ releaseNotes . AppendLine ( "*Whats new*" ) ;
80+ }
81+
82+ foreach ( var release in relevantReleases )
83+ {
84+ releaseNotes . AppendLine ( $ "{ release . TagName } ") ;
85+ releaseNotes . AppendLine ( $ "{ release . Body } ") ;
86+ releaseNotes . AppendLine ( ) ;
87+ releaseNotes . AppendLine ( $ "\t { release . HtmlUrl } ") ;
88+ }
89+
90+ return CommandStrategyUtils . SlashCommandResponse ( releaseNotes . ToString ( ) ) ;
4891 }
4992}
0 commit comments