11using AzureDevopsTracker . Entities ;
2+ using Newtonsoft . Json ;
23using System ;
34using System . Collections . Generic ;
4- using System . Text ;
5+ using System . Linq ;
56
67namespace AzureDevopsTracker . Integrations
78{
89 internal class DiscordIntegration : MessageIntegration
910 {
1011 internal override void Send ( ChangeLog changeLog )
1112 {
12- //Formatar o texto com o MarkdownHelper
13+ var embedsDTO = new EmbedsDTO
14+ {
15+ Embeds = new List < Embed >
16+ {
17+ new Embed ( )
18+ {
19+ Author = new Author ( ) { Name = $ "{ GetTitle ( ) } - { GetVersion ( changeLog ) } \n Data: { DateTime . Now : dd/MM/yyyy} " } ,
20+ Footer = new Footer ( ) { Text = $ "Powered by Typing Hard • nuget version { GetNugetVersion ( ) } ", IconUrl = GetLogoTypingHard16x16Url ( ) } ,
21+ Thumbnail = new Thumbnail ( ) { Url = GetAnnouncementImageUrl ( ) } ,
22+ Fields = GetText ( changeLog )
23+ }
24+ } ,
25+ } ;
1326
14- //Faz o Post com a URL
15- var url = MessageConfig . URL ;
27+ Notify ( embedsDTO ) ;
28+ }
29+
30+ public class EmbedsDTO
31+ {
32+ public EmbedsDTO ( )
33+ {
34+ Embeds = new List < Embed > ( ) ;
35+ }
36+
37+ [ JsonProperty ( "embeds" ) ]
38+ public IEnumerable < Embed > Embeds { get ; set ; }
39+ }
40+
41+ public class Embed
42+ {
43+ [ JsonProperty ( "author" ) ]
44+ public Author Author { get ; set ; }
45+
46+ [ JsonProperty ( "footer" ) ]
47+ public Footer Footer { get ; set ; }
48+
49+ [ JsonProperty ( "thumbnail" ) ]
50+ public Thumbnail Thumbnail { get ; set ; }
51+
52+ [ JsonProperty ( "Description" ) ]
53+ public string Description { get ; set ; }
54+
55+ [ JsonProperty ( "title" ) ]
56+ public string Title { get ; set ; }
57+
58+ [ JsonProperty ( "color" ) ]
59+ public ulong ? Color { get ; set ; }
60+
61+ [ JsonProperty ( "fields" ) ]
62+ public IEnumerable < Field > Fields { get ; set ; }
63+ }
64+
65+ public class Author
66+ {
67+ [ JsonProperty ( "name" ) ]
68+ public string Name { get ; set ; }
69+ }
70+
71+ public class Footer
72+ {
73+ [ JsonProperty ( "text" ) ]
74+ public string Text { get ; set ; }
75+
76+ [ JsonProperty ( "icon_url" ) ]
77+ public string IconUrl { get ; set ; }
78+ }
79+
80+ public class Thumbnail
81+ {
82+ [ JsonProperty ( "url" ) ]
83+ public string Url { get ; set ; }
84+ }
85+
86+ public class Field
87+ {
88+ [ JsonProperty ( "name" ) ]
89+ public string Name { get ; set ; }
90+
91+ [ JsonProperty ( "value" ) ]
92+ public string Value { get ; set ; }
93+
94+ [ JsonProperty ( "inline" ) ]
95+ public bool IsInline { get ; set ; }
96+ }
97+
98+ private IEnumerable < Field > GetText ( ChangeLog changeLog )
99+ {
100+ var changeLogItemsAgrupado = changeLog . ChangeLogItems . GroupBy ( d => d . WorkItemType ) ;
101+
102+ var listFields = new List < Field > ( ) ;
103+
104+ var features = changeLogItemsAgrupado . Where ( x => ! x . Key . Equals ( "bug" ) ) . SelectMany ( x => x ) . Select ( x => x ) . ToList ( ) ;
105+ var bugFixes = changeLogItemsAgrupado . Where ( x => x . Key . Equals ( "bug" ) ) . SelectMany ( x => x ) . Select ( x => x ) . ToList ( ) ;
16106
17- //Seta o retorno no ChangeLog
107+ listFields . Add ( new Field ( ) { Name = "Atualizações" , Value = string . Join ( "\n " , features . Select ( d => string . Format ( " {0} - {1}." , d . WorkItemId , d . Description ) ) ) , IsInline = false } ) ;
108+ listFields . Add ( new Field ( ) { Name = "Correções" , Value = string . Join ( "\n " , bugFixes . Select ( d => string . Format ( " {0} - {1}." , d . WorkItemId , d . Description ) ) ) , IsInline = false } ) ;
18109
19- //Retorna o ChangeLog
110+ return listFields ;
20111 }
21112 }
22- }
113+ }
0 commit comments