From 21211b4ce30b61af4d7e81327b87374f34db62f9 Mon Sep 17 00:00:00 2001 From: Marc Wrobel Date: Mon, 29 Aug 2022 17:03:12 +0200 Subject: [PATCH] Use reactions for a better categorization of news (closes #41, closes #42) Use reactions (using emojis) instead of keywords in messages to categorize show notes. This simplify user experience, does not clutter messages anymore, and simplify code. --- CHANGELOG.md | 3 +- README.md | 34 +++ emojis/README.md | 2 + emojis/lcc_archi.png | Bin 0 -> 14735 bytes emojis/lcc_cloud.png | Bin 0 -> 12052 bytes emojis/lcc_conf.png | Bin 0 -> 15157 bytes emojis/lcc_data.png | Bin 0 -> 2543 bytes emojis/lcc_debutant.png | Bin 0 -> 10158 bytes emojis/lcc_exclude.png | Bin 0 -> 5579 bytes emojis/lcc_include.png | Bin 0 -> 3772 bytes emojis/lcc_infra.png | Bin 0 -> 5706 bytes emojis/lcc_lang.png | Bin 0 -> 3546 bytes emojis/lcc_lib.png | Bin 0 -> 9732 bytes emojis/lcc_loi.png | Bin 0 -> 14622 bytes emojis/lcc_methodo.png | Bin 0 -> 11838 bytes emojis/lcc_outil.png | Bin 0 -> 14433 bytes emojis/lcc_outil_ep.png | Bin 0 -> 13897 bytes emojis/lcc_secu.png | Bin 0 -> 13478 bytes emojis/lcc_web.png | Bin 0 -> 7240 bytes .../bot/GenerateShowNotesHandler.java | 1 + .../java/com/lescastcodeurs/bot/ShowNote.java | 80 +++--- .../lescastcodeurs/bot/ShowNoteCategory.java | 94 +++---- .../com/lescastcodeurs/bot/ShowNotes.java | 14 +- .../lescastcodeurs/bot/SlackBotAction.java | 44 ++-- .../bot/{ => slack}/SlackClient.java | 9 +- .../bot/slack/SlackMessage.java | 15 ++ src/main/resources/templates/show-notes.md | 36 +-- .../bot/ShowNoteCategoryTest.java | 24 +- .../com/lescastcodeurs/bot/ShowNoteTest.java | 238 +++++++++++------- .../com/lescastcodeurs/bot/ShowNotesTest.java | 92 ++++--- .../lescastcodeurs/bot/slack/Messages.java | 32 ++- .../bot/slack/SlackMessageTest.java | 26 +- 32 files changed, 435 insertions(+), 309 deletions(-) create mode 100644 emojis/README.md create mode 100644 emojis/lcc_archi.png create mode 100644 emojis/lcc_cloud.png create mode 100644 emojis/lcc_conf.png create mode 100644 emojis/lcc_data.png create mode 100644 emojis/lcc_debutant.png create mode 100644 emojis/lcc_exclude.png create mode 100644 emojis/lcc_include.png create mode 100644 emojis/lcc_infra.png create mode 100644 emojis/lcc_lang.png create mode 100644 emojis/lcc_lib.png create mode 100644 emojis/lcc_loi.png create mode 100644 emojis/lcc_methodo.png create mode 100644 emojis/lcc_outil.png create mode 100644 emojis/lcc_outil_ep.png create mode 100644 emojis/lcc_secu.png create mode 100644 emojis/lcc_web.png rename src/main/java/com/lescastcodeurs/bot/{ => slack}/SlackClient.java (95%) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba62098..01f1015 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,19 +6,18 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ### Added - Add a new command, `category`, that displays the list of categories and their associated labels (#39). -- Support a main label for categories (#39). - Support blockquotes (#38). - Brackets (`<` and `>`) are now unescaped in the messages in order to be properly interpreted in the final Markdown document. - New lines are now retained if they appear in the first message of a thread. New lines in replies are still deleted: this is required because replies must be displayed in a Markdown list. -- Add a new category, `ignore` (#42). This category allows you to ignore a link when generating show notes. ### Changed - All commands associated keywords are now displayed in the help message (#48). - Update categories order and labels (#39). - Messages (thread or replies) are ignored if they contain a user mention (#40). +- Use reactions (with emojis) for a better categorization of news (#41, #42). ### Fixed diff --git a/README.md b/README.md index 6079d97..369833d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ A slack bot that automates show notes creation for _Les Cast Codeurs podcast_. This bot is using the [Socket Mode](https://api.slack.com/apis/connections/socket) and can be set up without much hassle. +### Register bot in your workspace + First you need to create a [Slack app](https://api.slack.com/start) and install it in your workspace : 1. go to [https://api.slack.com/apps](https://api.slack.com/apps), @@ -21,6 +23,38 @@ First you need to create a [Slack app](https://api.slack.com/start) and install 6. save the _Bot User OAuth Token_ for later in _Features > OAuth & Permissions_ (it will be referred as `SLACK_BOT_TOKEN`). +### Create customised emojis + +Then you need to [add customised emojis to your +workspace](https://slack.com/intl/fr-fr/help/articles/206870177-Ajouter-un-%C3%A9moji-personnalis%C3%A9-et-des-alias-dans-votre-espace-de-travail). +Those will allow you to categorize news using reactions. + +The following emojis must be added (suggested emojis can also be found in [this directory](/emojis)) : + +| Category | Name | Suggested image | +|------------------------------|--------------|----------------------------------------------------------| +| Langages | lcc_lang | https://openmoji.org/library/emoji-E1C1/ | +| Librairies | lcc_lib | https://openmoji.org/library/emoji-1F4DA/ | +| Infrastructure | lcc_infra | https://openmoji.org/library/emoji-1F3E3/ | +| Cloud | lcc_cloud | https://openmoji.org/library/emoji-1F32C/ | +| Web | lcc_web | https://openmoji.org/library/emoji-E055/ | +| Data | lcc_data | https://openmoji.org/library/emoji-1F4BE/ | +| Outillage | lcc_outil | https://openmoji.org/library/emoji-1F6E0/ | +| Architecture | lcc_archi | https://openmoji.org/library/emoji-1F9D1-200D-1F3EB/ | +| Méthodologies | lcc_methodo | https://openmoji.org/library/emoji-1F9D1-200D-1F373/ | +| Sécurité | lcc_secu | https://openmoji.org/library/emoji-1F46E/ | +| Loi, société et organisation | lcc_loi | https://openmoji.org/library/emoji-1F9D1-200D-2696-FE0F/ | +| Outils de l’épisode | lcc_outil_ep | https://openmoji.org/library/emoji-1F984/ | +| Rubrique débutant | lcc_debutant | https://openmoji.org/library/emoji-1F9D1-200D-1F393/ | +| Conférences | lcc_conf | https://openmoji.org/library/emoji-1F9D1-200D-1F3A4/ | +| Messages exclus | lcc_exclude | https://openmoji.org/library/emoji-274C/ | +| Messages inclus | lcc_include | https://openmoji.org/library/emoji-2714/ | + +Note also that aliases does not work because the name returned by the Slack API is not the name of the alias, but the +name of the aliased emoji. + +### Create the GitHub token + Then you need to create a GitHub [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) and a _publication_ repository (a repository where the show notes will be published) : diff --git a/emojis/README.md b/emojis/README.md new file mode 100644 index 0000000..969c630 --- /dev/null +++ b/emojis/README.md @@ -0,0 +1,2 @@ +All emojis in this directory are from [OpenMoji](https://openmoji.org/) and are free to use under the CC BY-SA 4.0 +license. diff --git a/emojis/lcc_archi.png b/emojis/lcc_archi.png new file mode 100644 index 0000000000000000000000000000000000000000..47625c0664c3161f114a8be6230c255241d5e264 GIT binary patch literal 14735 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 Hqu~Dn%JSG;CN@ z%zQ>}Z=U~AeLH0=@#HgZJV;u4`275wpPS9j&Vq!5L_|VDfQN>Lg3QXwg#7~P=jR6n z4TFjV^LoMv0}Gew$eFl!hk*)H?7^$ZL*Q?~NJW5@2{e)sPo12LBrHZ6yl9EGP21D{PqLKvQi0Ahg~4;>wym`9f8uW`egt*m&0scs4e z5)|#iIdUOod{&`?G{W*PM&zcXqzDQM3NT`Y4el}nY$(|HMfHJQHDu4v&k70(#Ek6BVv2i

JzdU|?s zGnXypq^_EDQlf~#UO2~Vv_3A_u4RMltnhbtcl3hN_?Yk}CME*k%{=R-D=R8~=%8^b zXt~*8sVkwF#Fa>yxvKq)XlQ8A2~6AG-ezTGT^*-VatwZdf9Ejrq~Q?_3k}WB&$qX? zR|f#(fxhl;ZVJ-K-0WYKWs#W~;K#?ttQ0BF&(GW2TE)b~hKGji)o3g&Ed_WGoYZL# z4-coOr}Rpfc>zZKjbz;1+LHw**>B!nwKSsmi-qX)>;a3-%}VtlDM{ir1{w2KJd;pLip}-OJ&4>* zPUH)bUkQU1o<1|b5>j}t`sakB&vqOMdtLDzrCnKaBu}XR%H7%Y_K$bDR1tyvpS|&a zc<*uYcVXe<15-jm0@}#;eJb+fW1(p5rYAt=hKqN5*#+3%RP@?7>e|s&(1BV7;u+m{apsHn z@avyJav3doz$HPDTdh0V4#Rn$wP6?Wq7Pc9FEWq%-`a;k$GpSrUUh>A?!Sz)x^Y&* z63qhzfNMiM5fKD9E=n8e9$>^>M6XBw(>b}3D-{aUHLL+{b5~0-<>=+%V3WGuhh|N z1AAGL_{dtmP4&AVFoXD*SN>$}lL6xre8(6S^N#WL6##Up_5N;sn zfsZkocAk@z*OHxN!nTv1p`=UIYw`jE47KDptMfO)i-e#Gb`I9u?OG}sOZlz2nIj7d zA$aYa<%1fE7>}dnXuQyS-2b#>ol`^6aHu_bj4)M?xj<7~Fre@i6vw%w4V19Sua?LOjQQ6Vh{O~M zddN?!I-RUyDYzq{3eOyKF6QupFw5u=!(`}??;PB0YQ$fKCZDbL47tX@#ojVgc1ynx zpko7ewAI(1;+rh*t zVY~5=k2^G#Z|~J~_>U0h5Wn=3;L9b$iFwW}t*vbY2@Jdb$0fztW*`CiT$xg62?x4KC7qX$FliM z$PIr%uUK^hg?4hA(Xb@A^_k^CCp~ZcZ#hnN1HmlkRHyHEEzj_VW=HR8Tv~Ys#`-Jsxd8Teee`)U*)?yi%r2B=gd|mL zpp9$Z*0n#8^TMS7-d0HgH9yDk&?Egi-jGDH9~?p3=&l?Af21+RpSN&fxABOn8Yhp$ zu+ft#u(_-FpH6Z=lEuc+-4T#Jq@^6gA)e47@y%1Ag%=gL4X(*@+W-78jHGOzFQkJj zGwe7t=gu7tvTQWb2}j2c}a*XkN15PJR)XDG{0@*aw9nP$(Epx8WtsY1=L>} z6<;{B&v|nk7?F0%OPr()_&4k|ego(AURczv@IJ(dT>8axI)4_(SX)JXpiR4vi#yO~ zB&oG>t&GPDDoC6dc@hIzD#}+b)ZDvzvn?OB8q@!g5^7tCUCbg1KRJsQ$&TUZ&OI7h zHS5#bE-t|D+zz~3IcUFFW}%Lj8`+~dVs4$g!Xywtp5bSHu2Cm-`dU>x{=O8SIDSfG z`Gf8;5Sq6lrm)+C$uIE{x{ajR1ZS<7`Tw&oG_b>*<6eh)5!YEy`0j=13RxAR7X~8cS8&o zHy)7jM6kSU)&d-M-Rjk=W#UsxYnfPo>)`;zUn=E(fM|5zvt>*FMg@kaWVO<&(QUrV ze73gdZaF|^ddhb+RcS`)uw!iSs8fMt0)CQsG4@5LZ>G-09nq0pMZo$vD)^K3SOgxW zKk2i)^=!ST$=0!LLx{|6hUzrucCEm#9T&)o$8}2lXtU@Y?0p6L_(lHsZUgeX*AA6kwj+tM|Tp8>4hP0)1e6AfN&pt86|}_~qZiIhS(FI+)#_dH(cn22N&a zLxT`(JsdmdiwEMH=kk6@6J%!8)^)dvy&rQ`_o}W|u={Kk+1vz;wEi@;3*v3N_BQy_ zqKJ3oJGFfBP?Tk!Z~a7qsii1S;${@7AXNR+1D|9_2wOayi>!19`C>~sRt(A&_+sJ6tJk{|8vG&Xf zUiAtjk8!vKaFHxO-oF&Kwh*!q=HKuU(#H1sE1uqGA9{H)TmMMzQe@6G`!WIQG$yth z-FSVF&eEBnv?&u$mhKZRMM3qtC<&@5N+z8}LuC?lHJB{94MM5z>xXHs+jch@#$Eas z!626`*W-q^D+Tx-qqF_VA%j8=Mb%nDG^2K8>GG(2%-w2;7O&XdJ0$!$cY9on08ot_ zt#H`+(3WwU-F}#E@-CC|WCmgbJx^s&D4{}53NIzN9kK~qLbiC9E(OWA+3D+aT9GN% zjL7C9qA?@>J!UKFFL;+QfQZ9Dm9;+qiqm?oP?qvx-SCmtn?>cBg)Z3U@fCx;;I{Lf z)?8P&QqtDO2$#jjdfmo$^>IF*g#es)UX`~S(2U+(d16a)1cb48>#Szg<;r5%q4xbg z(#_QSXNQ%V+EH~V8ss2R0|)LibwLMO&Liu5Z|bU_`$wU>4gW1Wg=h*Rch<#3R<y)^a+~MDcF%!-w1% z3CN)?5}u}H^EmFL7xZnGJ~cG!d$d{$IAcllwYyss#uML(_Yi$Z8OJ>9i~7nDs7VBzTUdUmGvs$w-q zig~lbN!yS%#8%R%-{R4v!Dic3jFai-k|*0x!iQ(1H>Rg!)?vP|*6>t}^Sr-+NHH}G z2iG7yv%4*g1iv`w5NKiRTGU8t$c&abt*g19DsZE)-9T*NpNp{3*fbMl*sXoC8t>Qpw0sPJojwQR=w z7K-_mZKNi%#08Ow==bu}4uO~t-M+cGR0IygGv8I`IS~DD09no^I?;=MNW6-$5*l`o z1qmRfiAa0MShDcfL8xvR!w$h!L}i94$!?NnxiOMfr0PbA(Jyh(!%19hdhTvz=^=6o zNu*DqV|ilczcCh|s?Gr_XNy>aQsZC2Q))&KXND+{&Le(JEWdCXJRM<&=c1N~72e%T z+$)eyJ5jd6E-3XYS5qRoXgMutO{nL^?~74YrvXj=s`)(^ahnT#tDp_&Mo+F9jiP zCp^6c{pkN#OHEVBi711%5B=}+ToBu*pd9%kpq90#yr8PIlm2UK2K;cta+tK2+Jq~D z0TxR>28NY|goLXl^?q1J0?H62l_J!D6zxT6StJ>aO`9C;{pj{A9fMSk%jIW#y0-)M z(S~!yWY1I8=jR;X&NGVoOtc1c(DE!;qrcI*PxwETusNxp_&Aoi4JPKLw?yupyRvn> zXjZzY)~S?>!RU~bjo8{Tr{YkoGO!WU>_fzxxAt=zf4RakbgvHMaj<`}(hcb)pyE)j zvZl&W3{D}wT9GY{N%%CnYBeJu%v%l+{}qO$se15%d%5-mHoqz(gSND_K9nX=`N)f} zb}rj9jbm9KdVSOxlAlg-;=}6{%-NNjA)-MvnL`XIj7J6DJvEK{VFyYo(Nw2IkqUgc_g$mZ2;3pK*P-7yatb z1Dir@xl$E}e%A5dVVr5JI3$b5{IhBoQUNv!>;(E#WlT4bDx5B8 z<%NEqt1U$7N~ZJt9p7i!mdtB948m{y0Cj-be>pM-U41gvY(I`!lyT|IRikrM%Kc11 zNltPgGiNkK;SE7LeX5h;;`nOUWb18cHCUO@mR(Gs&Bl=djZ%P@!cSi*S1VV%S$z}b z>avZc<92MbS_FRWdVx8Xj>?2a*@f}QZi7cIpjsZRfmza+UI#}gr)d#8f1+0E{VW#R z75hhUO<70Mw_xepgWGHND3+zKmW}4OQ02e2sXt8vLNykNO$1!}$;|+8R1gElaG2W@7B zl`g|C0i7;E8k-H8NP?b?UWNn8w~uZ_Zzpm!sE+1mc(}3@%{H@LY`j-WniPB8X)2fbtqNo9|3!iMM;v=vKx(<8ud`Iz|{i6R97HNx@fKi1q05I$84LVNg%fS@ZK zoZZfF1`1Y3wK;@ULhXEAly@dA7gQa|9^y2|!3v2MyoFzILJrz%|AJyXJOaH8Z?{Dm z(Z5SjCP7&Qms^R~7=ieztRpG}B>ix2 zgQ17XD(ZQi!nIK)rZ|%$ZXdS^AaXb$K0hx3Ex>4QBIoVHV8#t;?_?H4k1I%h3JCsn z=7@XJZuXFsW}eE!(SBv2$aPDH`=VD=P=@(w~= zT~Y^^SB_BU?U7i@0=+i4y%JdRyTh--eTq|d2h03+!yTui9qp-0qwB1Ovkc}4)`o2Iu?3)pNTW}NH(HzXae z7Xlm+E|z6V`mZVmM&W@*$1aF4+-lxn7zE0K^;d7dW$-)B84Q*yjNP zR!d(FJdzPefaui?zr`^(MF!TZ@-4E-gS+E1*j{)|eu&XUAiiB}mw_=3@xBhJPzv#3 zjSE|kQ{-juwWz_8T3!RG`YzvF_Z@|t&)*2}eN&q`&578t9B-M9L^vC`;Dl$_VXe?P zGJ|AV&hj{$`@5#r(G)NF(=5t&>EfLhB)M-nvss=WXuLWj<; zuQge*B5%U-%u2s1-Zrj5B!aOwl(xU{DAcH_2F;7=Qd_P!*Q0u84Wv}H58d3PFUYk< zjuvZ5g^?^i_m{R*6Q_H18ag;#B~ngohe$CC%*;z|Thqh|S?k;SRgYDyFpMRJB!hK^ zpdOpd^l9N|QoY)>1ZSEZi$F>T_V11xM~l^}Gvh}>8pHz8ZR3J^4rKz;C4beLF9Y;? zN9w~|Wjiugt&3E03C>w=6p{fl0IDQ0e@&6r)JSgg0*k?ZPy#51@0#MQso@ zn}?C5wv~YTaSHAONUSy3FK1=gE{wZ46&H6yrRnr^=ssTimluRj(50)kyHVw^D3b^2 zpzb zE(eHiDILN`*qeq=%wHQA?Wdm=Z_ddle|*QXF5s299y~DLQQ%fp>c!$_eJTG1{k1JK z(7?%ioOaM*?NgJ(?*10IdmHE-~%%k7U@oBU=T}ZQZ2pl92p!(=Gp?4w7a7sNiViy?_meXvYt!>*r(vKk~ zpYF;2^}Om(L19HxVoBe6a9dYlMB&ilEez&`VYQ9+#Y z&76s>%7XQ$U(zoRqA1N zDUAGSuu$JC`Z;&*?(}oOSQ^Kyz)w`7G0k;I}*LWK;s<9{V{7#1uF z8BD0D-qsx4B=YI7@c>0xSE$#azeZZ9aYFebEVu&C_djsHOz4358p4F9~XIrQXFcQZ`1{szR`s1I-gh`s??>FaT@x(CqK#OA&!or_{O-j;Wz zhIN%$!U$L!RkukzyKJDz6`v?VS#{qRF)aJEC5r@&U9Sh#$o7SAk5^Ru702DKJ~6ty zS|A(@)Oc`FM3m}BI?82V`a$g~vNVj7LPlL=Osw0jG#(o(jiXD;|4Q&KUEk2rRMjHF zzKv74JltN;UOvD*oCm6Sq%D{KreHguTujl4QTqT@pYePC`%+hhT<=E#|MCYc!{v06 zlHQ8o;z^vG@0SsW`IINppOrI#r!Y?)8_m_^_U>Y=cplXhfzq|VYe-u&`hBy9zwAtY zXX7p)VpI#;+!1c*)XMyA7y$JY$-f-d-{ySQU@-o4fD^@q1^-2;yV8@8HtIY|+zzJn zju}H)aXqC;mmqK1R^m&VGqGc;wcSIhw8SF%aUnALv7AMOooFna?v|PEYfQgSiYWEb zvLMQ|({_Z%OkA_%zVzjWDl?tAb$IL_`f75)Z>I!H^KOFpiJzq)(O3Y9Yimbh;KJe| z#*#FfK;{-ZeR%Ni9bt8Iu)@JqoB1~>+aWev;*)d7P;0IE%6F2AKlsPXhT5xDY^$~- zETDy^saSkwQ>$pFT>VkV6ye#bO2<$0Z>!w6BgY3x-;b(b)vb1p>?ex&Tr<8`<0ARm z|2u|nIZwNJ#ks_vhCFke9D#WGY0vy&R=Z9bdgvJlgjupNyQ08knuRRs|8cAi9*W&p z?NU`e6<&oeB~GdnA0(ZAPe;(u<6Nk|>$D)0cYJF3ax@E6_b@&AToYK$FOOq_n7S^< zhb@J*@Zb;(8|%OJgYPS|vDm{?r5O1LYV>(4*h7{7`rR5q6=5gveZL6{EmT&XS{_3w zb9wN#fo8p&iZ0*&LN^0c3Q8el2EMoC2XNe4Pz^(h$wl$B8j_G-iUFvn#-!mF3+3F z)q&uOF+v44JOHYlxG0Zv*D3ePhukza&5D8w$0dqk@d zKi}(I)674rHV$Czmfi7q=*6uT=&gj@g}wqA<)Xyvc~jDUUvld=C>Sns|F*FzF+cU)ak(upDI{Szv)JB(vVd@7@tD`=xe_8CLjN#G+gm{l2 zHxd`=wh(Kv2oF$*2m91l{P~6Lloyk*+WwD!lIr=Fa8mnp+M!3T$3f&&wG@O7N1)LU z?bv%wm0UDL~np!}z!_f%b=PQ0b50TghUZRNo7VyLKj zsYAryrbvmv0{XQXB#b9hIveS=8_N2V2_-d$OK<2%V^y%vh#cBlL7Wfk*#DcGw_DTL z?j(@%my@NCy@k13Y*NUGbN7b=XfRl%)fohlB1#~PD@3XJFvDsX!+FPV^&pd0V^%$3 zyXxF=srDR*U|Yqj5CS)>03Z_#JYvC1vUZMYHjm-zpthnv60J!@+6cS&)pG0tpk`35 zZInxGEB?nc-6U6l#ZBQW+J{@pT^u{X*zSFbtZB8U@m7E(%FFrjDuv}N>uU9Hd$8iZ z^Dc$_|7CN{l)F&g-mLJ~X1Vi9>n_$=H<#y}oz2=~MSC_lZP@%ePIlxTI zXouv=LNfVx9@q$)nyDPl(Jb5~l0d4V#d=Gg0gcW|yR*Iz@g(9B56Ck5kT9ixv87`8 z%uMgrQFnafnE&(`Z`Jnsy`bwz;7@RN<(ZWlFW~_V6VGLD(RCLbt>^yKboJQ+Up;ie z;NGp4hua;0BPBmnO;MUZuT?|UoVEnf$lb{^%xFmkmE{S0(K3IQuKMVs5Ui(bJ*hFc zHo7S)7X|q`Nz*dPs!7in)7e&VChM_jJp!8}d^%q8au}Jg-h&!i9h0yqd9276bn##F zY?XdgKSya(nB@p8C7WOR>u2hW@}-QxYFMiED045ecbi~iAW~>f*FJ}oBZ`|rGB?fx zaiOggzX!`mR!*5z(*rm&@0s!)QGR2o=IJ9wI zDlwUW(?)uZc{3?uh|MAWRA14oe4wz& z*5E@4{x5tU&6I+2K>^tT{%?R5b_i45@w_S7EcWM($ ze>X#qVz^i{sbXn#DtM}Gl9mZ#(;5z&FbHt<4Zmw(WE;mV&Uk7pM4gq62zJ%5(K1pj zqFFI>m(l?Lg=Fst9m5@#?x$bFGVh^k!RMLgsDgmNS^Mu_08H~?rsbn5d>{gjUAu6C z08asfY67Ceo?%jie6;e6X*K=)1#&!h!od?|YLbcOQ4-P76rC*cKb-!-oPLHv=@<@+ zey~0>qK)y(@bNw#aME!$1`2m<2C;93mF4^I+?z(;QLy-2cAD$%)E>jxVCjhXeyGEf z<_O*p9uV>PN-|pT1S_#Kpl24x6GyczB`gm=WmX%LNsb!BE%gtJhP>9bldC&hvHXr$ zZRyWAn}vED+l23^-^+{=u0>BH)m=Oj^vl^+enh7!8>_TF4F$K0o@{Xw2Ahe;HiXGL zXWb*LF4ek4x<7paqfdyqVyDx;a*YxwIaq!$osJk-4BXq0jL=L46PV6OOg7nKQ4i@g zS?T9TnY3XJuV$-l-~r7j)9i~FZ&&R-fsxTJbWeJ&*vu`l4bo z-Sw!QLzR@e+!T{Uf@mrq83PZ@COdt|wB(qbq<%fCVoqo2ocR}1PiQG{PSWZ5p#37( zt5Zk#BdYWb=+#Hbocm4lx9)~(xvmH70L9!Kr4p~0fZKTug~817WI&ec%CsMBR%^(? z)++bb#{FimU0wNegx^+vu`8RgrCpxy#ssDSH^xt0W@sBI9rcR$sOE1Uc09E+PhNx< zOU|;k_9^!3J(3NXhdmqHl?!bpkvse{W>W!KqAPEef3vc#SfVR);J_CgixkGow7F^V zgjqIdJFyZ?mEE>{hEqrNp;G|_aV>!?{xZzjv|$@v=5ZWdJuS*nRXNy7ln(`5@`%Q| z+f_|9C6OC0hz;Wb1k(hHSEnRZ^78RbY7!`es2NV^a&7I%fQ*}|D zU+e~Jk7y*3O^_vYznAYMq>ZPxT?nt)KP7N*;xzA%$>hGTl^|GSK z-pcdAEtDBBwKK=8#Ur~i4l-55_;ERs67L=%)6F5pgmV6ko}tBXFt1~EiTNvAaaK=< zWZchUy{EB-rC;|fYn&lubQ}5-N(ZE!iO1*sUGwu?X%His_M+=KUox-& zpVeL_YwOb+L)Po-5vQx+v7WAxduo*JI}oqEh3}!wWVX(y^9ljY$*Q{fkGKa#*~&-P zXS&W~^t9YdDezJV;Pb&fS4el~PL|D|{CO0lMpq%dKB)8aymy-zt!I6wA(C6%qhY*S@pC--uyJ8)(K5S2#%S^;axDMYmq`-HRo zu6b{t<6raje=N(%P8jMl*~~}D#D=#7TJ+J*gk+|1w}}V;a0u%4p4t_)m2SGL@p0Tf zRI=`Uzif!8I^@4-hc0Nn;Vb@=y`S-jNR>Z20j3~h{@V2OL6uS#{PnmC7|%!KPnIX_ z%X2(CL}>_J)9dVdSTJq|I&tK+4-7;tFMEfuz+g@fAbu%O4{9)wgjrL<;(-41?_7b1OAU* zLmOe0dcRjcF^H-@m0}A`MQ(4nj(+{BN+E6iQ%Acag66nfD&YC$r9|UtaPo10o;wM- zK^t`KhD^x(j0nW>@cm8oc6*Tz=h9-~g+&Y>`k>6i*H*3YeZEsmxl`m4>UX8ml*;e7 zPuP`KY(oLMq#$sixe~O6e77mp*=u`V%JeVGsE)f31Kk0#svhj`C`L)R6FT5t-; z=ga%6Q%vui*b3BONq(!g4s=WH=z6m-ox=BrnSXX~5pNZXd@6ndS4q&#wUk45B=-o< zv%eKtRU|sHDxvXWH^jmRh-kiW?N)~#yq?_a^nAVB-eulKC2k6i_;KGKISz+gN$+y_ z^6*G^n*q6|nVsg)kK{@!eYAq2hL5TY!l48jt0MFwV50wM_1LM)B$l9R`o7?cVm`yi zC%t5Smh16Fa47QNR)6fU^BE1`W%0^mY>Spa_m#_s=(Nqnil%t^E0Oi@*@DY=7l~s$ z$&VMj!G6A%14!bfLtPPJB;j46Bz`=votdoH9|Y)S-0dj1l*lbomaBW>YpTN5h+7~Ic^tt%PANwa{I!lX zN|3u^sU9G|eH%Q3)E8?*mECvApv@MFit^ok)y;)SEK;F-I1Rm>wKx}0KlAqLQEXlj z>`mL53|~ZsBpe|jaQ5>zH?GZiWy;0qTWxMoZqV`$%5mLPaumUAt&}M$Hoi|%^AGYR z+V+vIyS=v?Xzmli{cko_@}Kv;xdMGi+nru+R#tZIGDq|C?|Q+gSNEHLo08qh2Zfdc z(RKpwvDWT5sg=Y_=dC8n2db6YqD`3>aMd{AGlabdU|x}3-;@)}1WMB@5`IPzz)^8= zp-^FSk1ntzoz}kxa(gwXs{+v1O4BiD@VO#d++k=-WY;n(nB*jfRB%~dLfSlbAoJJa z6ZI zE52t&izLt8A|`RhT%Qh>Le9LT;Z>Eu>HV17ULWTEY3{VC`U7pkHUHau0a6M;SW*G8 zr1{>|!fXNu&wMzU>1r>QE89MKJh72%f}%bmwK}OiHE04CDg~xQGSC1ErXm5}C`c7F zZ87{!93lT}46HUXEXFVQ*`6nTk&O!4&z&HpoYkY(55J?$yPr93mszW8?5XscwIP0w zPt@Bbhbv&hs%e`V__Au|lA=9zb?${*yx036(}Q5z<)pQ`36c(8<{dCQ%MTHUbi2vE z^_+oOB3Zk%6&wrcGhTl?mm4{|miBYL`Jq3IImU(8BsVJyEaK4W{_i{Ty3|Qn2f5 ztsHv55T4_MBQ|lc)06Z2mk-^W9#9$!86z7Ds=T!y&Kcg0usw?EGNo>x5>Ao&_X<|+M@o@Vkqn|sD0Z|OZC@^ z-n#!KH`8WpA$k+EEXB*~T+(bF!F+SMD#TBt`?ED)VE%m&KA&H3KQHsc?vX~AVWth_ zLk%>Fx+rRkx;ZBu^>ee(+MCIwdfG`L#!JBY!O2)BPw;tJRqUpc!tgEC|8DpErJS=l zO`@WtuGM4zWl!+0C7({Xjc26$v9_v8-&&C2Lqf(&*Q6gtFrNMDPMy*-kMESfK70i> zE6~hXVOveWPL<%{cPdUw@ko&~s%q-!XO+<<#OY+8x~-5J>hp0DKvro6#YAN2yfj}) zb#EqtEMCG~>?yHIM5T=nux?(!+SOF>G8d6e-M6xUu3* zY@GYfjvyxjlY`5HNxxEPPRrr147v)T-N=ya#BK z=@?d43Ew|$dFFa7^&uX%sUhDzByO3~x}IhFiAf*T+*l;ICw}emsCYW4HWZ}cLq0X+ zdNXn{dore@J@4HOVv&UgQdPS}^!*-SI=4KKjQXsshSQS~ek3n04Fc_i5ik`WKJgfE z3km8z5_hsxF(J}#i_J7LwCl-STv+b4o<`paF&CGf`pPPOsb~YHs9bozms&N%?UAI6 zIAXsBJti;(DZFY;B47O;Gd(o~6@QEBf&{1+JA}$*z|Q>H-eRo#+*uX!U>h0Na2OiwY19kQlFMhSO* zo5vj7S%>$Bkt#0%eFV2)((cr`j&nS=CEYHKC#JCR|+1)?@0m@w@E!Aea=K6xWT zaETOD&7e@5Cb>e^g4<20&{Cxf=Ey?lB;g^Bo(f-ijAl>66yMEllv_i|Tk!AkNOh%J z8U)D3*7$j;Y<}QdaVTzd)l36&6eh%h&GB*cnRaEk8*_#++qH|+ZF$@=rIA&K(`>IL zJK{Et5Vg*#GGz0_OCs^t!+h3cifqgAyg-y381cG4ij!I3)CY%jWXmIIASil~?CYMm zjqpyo88QK=ilE$q1F0q!S&l>QO@H$j1BB~JoA-T_fRPpV2@@VtPsRpshtzZnVAuq)oOx)W5b z1uQys%SNzO-M3~p)mAtqk;{Ryp~%Oy1l?w+TTA$uVJmSiBkj1-0BKK5hVzH9fOe@2NV)?XA{|CfFGeZX!Zlm&_`e z#|MV2Shy1rfWmQY%qf^PwH^%+S=$qVvz?|ryJpLdK8$EiW67DTY0-gYmv;G5EKR;O zYR3&EDz7vyM6Hw~EFw2P1F0C!&@Ne>`!if=J0;E4d=E^i?rB2;aD*@0K)G?ww~r}l zmL{eF1blX%d~XCUU^jXMMG8vvxJ;wUgIUxd>hxk(*ZS8jEl}(s4SN9$2W^l41h~h zT(xM=ABM4zf;g?4xN;^4Z=hsauJc+y(bHH~X0a>0=lDucQtV%6*_j#IVd}?o^f4wl ztT(zdHr2m2(2bz)eV3&yQ5*2XW#-jkpv?qwNu{*tO&Y~k6`uTW6-)l?;YyKnPL?ks zwAR|Q3vqO$PHJ+vvgZbV?{7c; zR=3A}>Bl<0&W4p(G8G(D-!A@l<2*d%a1gQNAEPw?bup$i(Pc9!U*feKylt5|Kauk1 zQQavuxJzz(=`llxh;0CS{5p3BN>oY-X(n z8XvwD1Hh41Mf`}P!VYF=b!S)#VVFMRoV%wy7lE$ zJGDxPD!b>H@6JVNtY!R@>RVprM`li$tedE00)68V}+2`%$1`_8>^B& zp?rDuiKFbF+JEz5Qe+^=(4tb|lP>e);hE^8>{O+&R6`#wy!p*bQDAIOKlXe2Xf6q% z9j+_>-*=IJ)Mi8c=IHYz9p(?Dph`0vManHcoe^s*jL-vzw-rsd(jLj-X6VpL%$POFlws8*BE1WpOF)!%fHdw2kE@{l<6`*&xDW+JibRs}cCQ3>-pzi*vp`JTqIoygvAI{5d_i^yviw&S;x&a6-C1+9I zJuimjPE;-0PCBwRNeseWQn#M8)>KyIQr=}cVCoukQNtxiP*va8U&%+;Jj!|~Pg@Er zl`pM@KHGFywv`37X!Yc8)z}fsnCu2+&7}v&I@^lpl%B@5W=)c8G*CC|Bdb$Vmk>V! zvTwBc8G$b-Jm0ZKeGcbC!m{IB@0T@JG|gXU^kTUr69_ou3Rr)qR^(3B_6{v?Q@IOJ zR4nCQKknJa(017f5DNP5%bOZbYVCcD4<+QssUS;93#D35fe*|mgH16?*m9Ji z#Icvdjk<@uN}V5-OS7)b}rv%^zUZ2>ppLnug;%smRG&|GVi)}UN7?8uD}(T3wuf@DR)Uq(Y|-t z=FvFVHwH|MaZ)TgefGYQsQ-soc>O=zeXNoY!T*QA-?kYV2mH74_5WQ0$k*cSpxhC^ Rr~G%0oRqR;t@w|i{{aNeU&#Of literal 0 HcmV?d00001 diff --git a/emojis/lcc_data.png b/emojis/lcc_data.png new file mode 100644 index 0000000000000000000000000000000000000000..d92131f9e406d2c635eb15fa22a098eaf5dfd73d GIT binary patch literal 2543 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 literal 0 HcmV?d00001 diff --git a/emojis/lcc_include.png b/emojis/lcc_include.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d31ecdd6463d0fcca35ab5d2f7fdcbdab4a82d GIT binary patch literal 3772 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 bi(~t=?q%gy=COSJG=u?u9N(+nJC6PfIU0t( literal 0 HcmV?d00001 diff --git a/emojis/lcc_infra.png b/emojis/lcc_infra.png new file mode 100644 index 0000000000000000000000000000000000000000..f22b4258e136970967d295f15b5fe8bd115e929e GIT binary patch literal 5706 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 literal 0 HcmV?d00001 diff --git a/emojis/lcc_lib.png b/emojis/lcc_lib.png new file mode 100644 index 0000000000000000000000000000000000000000..8cb4eccab3aef8a6186da265eb6d60ff2997d0f2 GIT binary patch literal 9732 zcmdVA=Re%f7dDP8AtZ$8#0nz%Cwhq*(d+6hx@C1@5q+cgMDIk2)mh8xC3;yQI?;PC z(c8WG{{DsEgZrM>>-}KP%r)nlGxI*zc`y+gYVuE?&^*Dy!g{KxAPd66!h!tz@E>6; zWki{(SXhs+G*q-d$h)XWNlB5DlWS^f5)%_!Sy`Eynm#-{2nh+Xv$Om8`MJ2b*xTDf zp-?X`FD51?Pft%*S64STHw6U+IyyQ#J3D=SeO+B$%rs2Hz~8@r|Mu-$j8XQ3tg5Q& zw^ol8sB7x*zP!A=aY&}Qxj6>-cd&2g?Dp#FN>ETxLqlU{ds$msdwTC*cYbH=@^JV5 z{x&u?Hoq>#l<%#HiAlAV+UD1okAVtJ3x7vfyL%TJ9)7Q3HiF^#?f02^&6;uc+c6$i zY;5dD036e*W!(fW+{cd}KOrPz=6SfgtM9`GimBAkpGNiVKEc7pe@4n8^@2+aB5uc+ z(;KRvH}VL8dwF|rfmj!{k9fiKM9H6(lK>z88Njn`M}g$2b?y4~?d4l-8iRBm_vWpa zc(_|9t1cx&!}GB-QPJjY|4N6p_AEX zPEI-@E?|}?xNvw)&Hgm0-MfdAIpY=m#pHwz8A&k(@LOt6nrSOWj znTp+<3^li4H)`_E<+E`io~ifmUWt-g#1;~f=(LZMZ z`k2Ef3uUI`fB&C>TUhtDRlex*Cue@s&-78;Hk>(MJ6 zG0o1G3-e4;S{~(^MdL@3&j>f;qr*B^&aY2H296iO=I!iELPSqq3rPib>}V#no%Zz{ z)>L}HyVt+?tA?-z)tZLTQ`u3HE$>hJRO`=d|C061;ZUMXM<2Z8Bi>F);5VRMaAQyZVaO`s(

*fX7{p&mFZ?^dSW8v$mkPB ztxg2UQpJca&@Ju{flbBPp%BeH^5+gdf*m2WnlviCA<9BBF3-P{xGrzLnvrD`Mv*ZN zy&|xpt?37WpQpB$*?7)%otKvGuKH?E!0+$Qxpywl-FLi4PP0o&|0SjWJKL}BDapG} z2|8HA#*MD6!|a*?6?sV$SSGcCnN4Qv4!eZV(<|B(gBKdZ>!nkNiBWs0*X}X(`m`Fo zN%s3^y5veLlQ2{eDdmx)R?0d$#68BeS_8O_W2nRpv^0{i6NH&+Wr$QTzgi2T-~_n9`Qhb=oP1 zOCqAj{ZF!m=qznTRgFszuKwpOr$+xITs(4aEZ0Y-^UW2VxLyfOUr-ZugvIqT1^0se z`81A@PX+^fMd}V+wPAel?%n|E6( z%Ku&Mx|V_B*_Q;pGN;BJpYJuMq#i3`{1$*Pob!*1>3;z&R;d%v)!1oCct zTEh|4{r#jr?pE+zc`@fEAH!s7Jl+NS&On+{BV^mB?E$p0`hz%}mRl-4<=s|#9Fv}-uyC>E@8*gSDDgxx40f4OV53$dcM{jj zF+-BjZ5XcFk(SKFTkB1|g`HSGv@elt4+dFkLv`B+G6g$XT{~zti(BxmA?3do!*=I-4)xv%P~jaI-DCQ zh%LWAXG8AFKgq%R_`!W!9J|jH&D!iAwJh4#qH*Y%)?U(@ z+HtKkcp2T}mk8Dmo4G+z(~_wl?Vj@1XZxP#b_zXSw};NX5Fy`xSU6I;nXD^dGYIZa zkAMX8fWvMfUT}do#r#1xCJ^YH?~TUaQootnnZn6$i1E=Z6Dq4YZ60vW%r<}HIQQaS z-S~<~6$mj`gv#`ju>8nfp4DGCIcv_wy1GIZDbVQXG!R3bxTs3RjT}_vj;pT*9^c7? zafF^QVa5jjIDGDOU4P1r%qi6!Ktrxp%S1FC#XMXM%Nw!!IaEi6GSZA7LZt;odz}#} zH~XF;u4y@IX8TSV18ZeN57B=lN{zezXpKGuoPL*I`8Idg)(ZildnWp4mM4$YEq&_I zKAYKEo}7}XW+o@y8_C@vAyc(}O>LXYoA}Ck-nkUVH@x)no4! zsc<1rW1IdIOnIVnlvNld{rST(Bj^uf-We&S8A9qam5O@h-`L&+q15|6wSB&Pn`eCv z%E(+dtyC?1hDxQ9XhOX~(Ec?<-ML1dm8dF8PhCod#M@5qXJKi_h z2Mg}-I@UokSW37x=?2-~euG9%uw2Tl$KylqvF8pIbnoVToflosAiKtYNStBQ`8UpA z`6xv)vNKFnvU-L(*;0pH70bXypC$e>u6DXt`{0dL^BoeW23Y*6vvQLVA|~>wRRY`kU~Nf|(pw!RkEr zAJL&VpHo0i#wuO+X<~+fw~>QC(IaTpsVenfZ@}Fb+-^25a1&4bij?g$uZ6rMf%?~d zORy^SKK)gOm0dFCL!`&etmggMtkS^a*U5&~%qPX8$Fn1RJl>apWsO3=C9?Zs0TCmW ztDjw<(yc``I`ON>k=~cHpNslg_1~Tn(5!R%IS<3(Uvoh>jTYj9v1t5TNw1yz#8UNm ze4UN51BZ9MFgX$TtjF{b=i$g9pc&%m)7uo3)wAJ8caj zPNXxtZ0qfB4!nT-FR#O2=a_xiBKtIurl-XuT?oC|>x@p;Tdqu`Qa%VPz0LX7 znNRSF&sXP!fFUNCPf~n#Ey=LEdfe@b>lI5(lX^T=>wpzMv8i1m;@0Lc@pdd-A3|9| z{mX}qeBRWRP^ZW3Qt9L->!Vv;v6YD`Co=NkFC;!6$8=}}t#e9HP1`#528``f+s}cF zBuGAqKeka~%+6DaST6O@`Kc$m&gm6bho_|4QgZcFM^4n2g%u2qE6v=zUu)rL4u(Aj=g=zZc%pByUbTd0LLcCQuCgAD7a&;0;3rsnKN z$rq2wiYWiG>xf-6F342ZpNaYW4^FPr6v&)t*iACns1T~4GH*<*Z0!r%JW5g%InBr~ zZvfes>Gz(zdd9P3TBQ(L`BCEfSEVXC@ys?s4~iussVwIx#*q-A+Wi!~1YIq2w7AvLW@l0x zLmn#hC-bRBk3guwO*egZPsJ~e9*X@lJrJcu2Psc_XbQ!3M$hlL5}Mh7AJB4o9aG_v;RyouCrePiSXn_cL}) z_|JL0e-NweXBlp`mfM=blqEWtwAr@Fn%5kJp1DE!hfL;qk>fO(ll~%3k`O57kYD?yO8H^og56%8?zB zA@)llotMO>^nC`R2dYoiMflprGu8h131(a5;vNX;IJM19_di2P$Z&qHed#tSf_N+X zc9gFQ@)-6mpZ+g%oi3Cc(>-@!szpNBaN%&_wC>ssA+udd3s$B z;bEPLE)$+a$Jsl^R&m3)97RR6TAN#Jo1!Uy!}v}G|4r(;U#n1Bth*58c>Bh#%{p1~ zbbV=haK@E#Ct{{h*RxdhzO|9cLH^}WJ=dL4yd*?ETNP}%aHD>5zU`ha?sa&ndU#l7 zgHPJu+_^%Ph6k#T5RdXCZi zqsnj6xGroi){D|JSi1TR!~TP5qnONpWjqZ4O5#!Bx1`$qB;rZ6krwOV{Ew6sznbci zRS+<|jDr;SjF=^TT6iyq4Ar*eHxhTz>pkL)KD)|U6Cb&2HASC_jCg;%??t`d<0N%{ zpOVgG7vu3qsLks^3me$?vg2j{(t(3V^LikI>FAW@<-y^7L^K+e2b<=4VXHYBl#ki zCCoh^?_44l-BkYa5~QqZ&R=T^a3@0opUtFI%m_$^R@AP6hfG9guLj%hY4lic?-DMu zXVW_V%tW3@?$Wj=)d_S&mL_`Pzmk0jmV(-B9mM>2f*SwEr9nf4k28susXPtFF@nHH zgv$wW09OelEfq(54s2ugFQ!4tO0I@<01Wc6B&V2B^v)O~ZrwQPlqfX-P9`gXFH^(E zXKLjIdS+Y>O2(-fUufraLDljOdihJVr_Q~E1M$CR-Th3=T34adlv#eni7fA<+jG|E zcd)j7#rh|>!CXwbAP^Y9Cy!|cHiQt57{VEI+4zhwZT6|DCP z-=ZliI$03Hcc&qLRX$ZhP*VEB;)Sk>H9)%S0I&=ON0O#)XL|(EYh0%%|ImD+8X=G0 z`5T=$TfOjoy*H2zDH}ruuT6RoxAzl9b`t~49l(07hxN`?t&-Qw{}mPq@YM)Izp64- zd|z07T($9960i&b$MpV$;u%6{n3&ux^t|1@T^AaZ_w|weMAB*}wTPm}tT01$+B z;?Tl_NS&6bhx0$-S@QM)RXKc%2^QA(P-t$cSn-(#u<)Gz?8N@NGQH8A1TxyVB!=n# zBd5&tvCBOuF`Z`7<^!dVo;&>ROjSaHq-#=*1Pv9W>3T;i3wP9JWsLNQWlAypl%v6# z8Uk#t{22}b2Ns^w&5rvbxlj|IId(E$urcE6i4m3s((o$o>-<&YlKSXYLr7t*~oFY$eAp?2JiYW9*)v zb%GT)@UUSnNIvrXBy|W+@i#Y~=4(3>No~!;V>uK_Fe1zDKf|kn^KUz6QOwr57sNeu zu&OiynJR?jeQ04;9#y$7XfC)+GK1*Oq2r@INpNYFrqt7jf;x%@ol>Fekv=iEdI~&1 zkS*Ayu!zQgjzq0HGp%K$?1&_|6P-!4A58&KU`D=pp>s-}#<^uEcOV$~L>e_qP5+Nh z$@2T<>^?cdqoDc~>{hiUZ0W!`YGXKjVd03-!2UToi=fWz6X|EwNCaM4*0x3MiK63U z8AvO1m#VqmqS0jek+g-F^yRF9<&^DL54I#l2%bUMv1kwr;A;N|1H<)P+l5Ol-(9p| z>^TI<f$6joKo$ML@~h3@SY zpVg@85pGu{5&+B{!4z*Xp)G2ieMz0?@;lZ@@vcC$1B7oehCbI@*&hOb$?8Zl^Z^W9)3f!DzBQH3H{&{=mod`2Sa(WOj`2dacAck5@ z9F_}9nmld6q+$GT zziu%rEIONk{hc1YYON4y-Db&V<(wq2+t}MnenpYry=O+OQZIGq)S+znhp-xc!M1-! zp7~paX3UHZMzSCMU;8MxSQ7(%B=0niHYDBDwyc$99-2C>4QGInc!HH~3PsHKIBAG; z{VgFGHhPne*ipVG-mqu*GPQ_ym3lKMh4*0_u{LB^i=X%*(z`YVBt>G8C50{B2ki;S z6K=&n_sPvb2E=7D-ehc)+m&>^C#lIg2G`n7QrIEEi4Yuta;sAz^U;!8@G8l_H ze7?wSQHO9KV+imc^)-fZ55+ES4yA=BuARI!k;6bXWjl85Dt|c-2r{ z{RIsJZ=|ms<03`|&UO{}em=pyuYVs3?0o+emi2*A&Eu^LTtu)azCzMMNc46_D&WGb zJrEsiR?95LVG>mISSeA6QF*wUC1^f1^3UPXo>GidyqpQN=Pu%G+8}z;cjQZQ`f5_v zr)YXVpS~Zp>h9-fqGgzT*dM>Y|K&*dKh0rE3vE ztkC452)vR-0JlJI6v5v+lEU?ny66>tW7hE}f8=TD1gyZzrJ?@>-%>d;yAHpDFl)cfE=N*R;4!nF3Z4>4M1=umjDG|}z=PF;PmLk)$u}{0uy8j;y3DMQL_CavO-=a=mUJ+cANDYsg6XuG z7BxPk15jrSr-yF*rCadq-pAuccI~SP1|4pu5W$utO-#L-#)phidzMX$t~~OOt>7&| zh&?f|ktf4khb?m`CrPj^*aok&(0XBJHuepKRANKcLJU3WUxW zym{97Kb`Mu{Yu%?HA$O8%K%Q6(BNeGriI%J_=i;MSguOe=UWMR%t znj~YNvsv#(WI7;c77R$!o1Y#1d{^b_UW!hO2f#RI(<~5KT)iKPSItSM@)Q_FPtb=0 zf*-u{-jhgRB9o=1aY$jS7IwS`O|Up@9jZkI1EUz&S1iHG$F`(9;|jxRdf5o4bT8I> zApQbcX~1B1Cc$LZYp#HBhts&%z9)&o`JWmIq)dn#`;+8?ehYt95^HmdU`BT1{!_mL z`?w#sU%^3aNJ@T+R_AUSALAns4W|EaX_oB`PM&u!!;W)!)D40yR~>oFKL*b=WP z#V;hnh_5AfV@uhO=FXN_HN8^+7ABWa^u|tZiT0jaQlthPj7xuOP{hNmGSi{ucx4!O z*3A5&BW4RUsN1GaC~iIM`skkr=^o04aMpx1rkFIULaxw&oxcK;B*70JRMPuIRpX$E zd$MIZdO!bh(B|&7C`%~tQaW*Hzf2^5llLB*QEA^G8cxo+q?_Th@%IBYBR*Jc7X|$s zc^gkscwTb7qSy74HG(7C!DqaK6joq8LnIvzt;;FTN;>1z5NDNz!=DvGWv@ediz%{v z81oID;djoU`SU_$L36nS{nhw_z6woF4_0%i3@(73*}s6KMUD=z3Y=+57v!zhR^;p` zM~X^o<9Cju--U4@`A{G&O=NA~Zc60^<*EADUBEFA!-(mB!cJfi5KGG&e%sjk#RZ7( zEXDzp`KR}I4LbIG*N0nf>UiOpKL>i=7mtyzSy3zXUTVIKJys9cFOuM+Gl~u9q_J+j zE%@H+o8gmhB_@IfV_bhpZeoR{F~yKvukCt*AFq41RfjWqW6eIddkX7!%R~JML@NXi3Wk+z<5A?86%GeJOpAKtP zFi@2b8x2jica*T6Ej9UMKu_q)h(G5IPUf2xE|&VKSNN=EYvfp6;s91)fVmSmDtdB6(1)b3PBm%ZosCD(bycG8)qn*)2=uXk7R~v; zqJ{68bdZ{scO&Q36hX2yrZ(QF>p(9laZ!uwl#dh*CKGzR2rIN<#P<d_i)k~e> zChzqnGcDG2iNnckpDC+K#q;w)p)C`RV);oLkdja&z5(L8y&Wdn@dEJH7QA^H9(``y zI(QKHMnK18=^dS-Mb_|Dewvi!6PSLR7>5~=fYrBI3Xe!8*52WSx*xwJuTp*WA(%m1 zFz3IL;y2YACB3)KQM^1218AI}2pCR|Imez}G*B5+1f+YSD!GpOnN_t4Mer?p(4svI z>W!Cp3hSA$DLIie_zwrTs+bD9p%>_0OLA_59HNMDWYgAxG<&{>Re> zQ*cBv=^+{Dy}}tAE7*Jau~B*di}-J*{KJM0ltx=Uk3!>#7M0XkPt9+2u zsEiZPpy0F4md#y6j)l|rlT2;zv*jg8vPgvT&r((fmX`4vq_L4`oZ8J-@iEsk3C0l( z>v!~yW;d486$dw6DTZhy^gjFe;^u7t(>hB1k}DL%^a9-b9<1|nQPmf29rf7TvqZj) zce}9?Q!7fCpLo7qrcL`5KcENaK|17%*NIg2C+EqFy$@y2-?Eh-sfmk31l^djwvE?J z98mSPyp|+z^C)&ZF*lMxw}3>PxYJ+|H&JPqSI@~ zYs&b1?nZC>l;ht7*WpwM$h`X*w@Y5l(yiJ zPA36V&bAbBBFj9ROl+%hmEu`7ht!zq!IXO5-1hNFBZS;_8U(yoit&l7dompM$sae> zmQVdHasY|~Xl{q|njQm_LyFdyL8Ml6&g{{`=$_H6r`7ZQ>2`J%9vYV=D%J!b^GwG> zC|Ho9W@E>3h%@C${WhC4j_di2c^cxwvyIK4yiO!P&ux*)X2#61)^E0Pymaa%zMwULY14oQ`Lteu_5N%*pp)_Imp4{Feh`ip z)`E?{B>-7x?nAo`B3Tr0!LV>X76p2iK8BI5G}3|-%vRZ?-5isXGXZc>G=*=wQhZic z%8CO!*Mu=9JbU_>;Q{r3`**~!Z+Ii!MJx0ti4G63hM(!c7SO z-|KoX?eaf6^DfIjwBU*)ZRp}kOk~FOF^lbR{PUR%WQgUXOv+>F+b9!eO2W|o+6G9= z;JJ>RKTj6UKOwcMwC4!iQT_+b`v=v;Kq3F=dSIdxy`vN#@EX(6+2yKmb{Z}#N0DmZ jiGSYa`TzT=gX}&}49oMLUp3@Q|CUz#pe9=(V+Q*_c+Kry literal 0 HcmV?d00001 diff --git a/emojis/lcc_loi.png b/emojis/lcc_loi.png new file mode 100644 index 0000000000000000000000000000000000000000..70abee317d6a11b1da0600cb3ef90ca9681d70a4 GIT binary patch literal 14622 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 literal 0 HcmV?d00001 diff --git a/emojis/lcc_methodo.png b/emojis/lcc_methodo.png new file mode 100644 index 0000000000000000000000000000000000000000..476cedf1a40e6ca3cee3e86f21c4bc2bc2604900 GIT binary patch literal 11838 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̲hH|27dt{i_}9hdDf!H4 zn_qUeTHD!3Aw=k$fByVIlGIXTc$u*ZeIX6{+>fEpKqIyAO_S$U-ewk4hsv5n= z;8;<&rU3Bx)0&jO-#Imz){@V1YmOPiEs?5VFqm}CI6qI8m|zG726g8@vj7r4E#?HC zYP1g@D9?kYHkECdVDDw0r3+jN2P?(36@@DQMjT5ZkUVGmk=h7LbHs7 z{&kQ1Jx|8@&zewHxg_UT;rZv{L$yq$YCK>n3vyW^n~gN358I0rFwv~6=5h*z_kld{ z_r>mi&a<_Od3ZROllGonn+~Dwy^ztoROl7zvoXB@w+Plv!BGA^l3;e?XOW1eb`bwf z(b7yImj#>6-rE_zxF{rIL`_a@21oH$T5vEzPUXFHCsN%{l%EPks zqHp+9ZQ=6xgprAn@#G|v4D4T1U>!l2pV@h|M z@R6~yRcw4;+ag|C5m7o$Y(>&b3gnn{LA|lmV!}190W2C?xtIycI*bh5|G|`Cpd;(2 zkryiL@k#2KpU&G)Sw~uH$oqU&L52R4mBosAbiiMlzakQ-J{`nk{PlC8gQ4pgb>ohn zHj%&!uon-%d3yubYR4F!QDx7{Y-!$>5_oS=hThPtUfm^-OhP<$h`}!Qg7k?XuWax%0W*fR9obt-(0)#M`oShy!Jp6enZ{em>z#3fpiRD#*dkhLT(H;u#{( z8@x5 zVUb;Ha;|Hfnl8wSs#ie_YS@aVyUnfK?Cg!IN zd9)6irkc>*Tf5sZ2p+XRLu7Lm&m@IAHkfG2bifiA?y*`}_=({8IQx7UDLfs!!_qiR=rynsrsd`dYG}o zmg=Yi`d5Il=14f=dQfY;WtmEzc(Ta)@ka48BL1c zPNV!$Jf^Xx#ib$6SU;F`L-(?s{UtP53QrzG(DIRt0S#VI6N2Q$OumUXwH)@)F;)hM zUnB#mESx(u#S7RzZgODK98p6jinZGiMtg?^pA){!I2jlG-izMp&i6k6+1ge`aSJ`k zVVoghz*(5A50ya*-dI71 z!ECy)K}(^u-&qDL2J7EgL43jU-)$@1{A`{CglkrDQ`5=)$=2*op#k&XjVht9TnAt) zeaAwK7*fnX1S(BI^WRk~Q^_V)wJ=Ysnih+P%3?a7RDB-jG(cE`uo*>i5n`k6i3rk7 z6QC*vz4hpbw89cvHZGKuQBiY^BI21?T6-xfj!=R?R_T=HppH6al+Ur{zueu^L_?O=1hEviaE=&8X;rwir-nEidN$|vD@JnyG6l+ZdB68{< ze)VijnTx~4M(U*~6|^^7LFryn_6WGodw69ABV zr<^}ZT?Ckq_W7<~>2D;Atop9wIP@Lp+MaA#i1z5vsuQb`9d6a8`^%F*_&dIL%@TJ3 zUdFXFPZZAYc1V}LaN(vY6g6wSJzpl7Tg>M~T=&{K$<{1)1P>frioOdsE3O7o>g!_F)%7s78@S9o_j|6IzO~yuletlgc_Rd0vAA{u@^zUyG#29y6fF#Q z$5cXdTPbvOk0#Sz)!E6mmuEGF4BFx&{9I@?=SGpB&*7yXOT4EJAtGe{Hn;vcpEX&BtYj7lGBe>u+Tp(X!Kn58^W|+`sW{H}iZ*1dH$N%v1m19e%weutgk)HM!HC^v1t9Nb-pjm|f&Po1X d?qa*&;kh0ukHTefjQ^ubURp(}R>C;we*gebh1>uD literal 0 HcmV?d00001 diff --git a/emojis/lcc_outil.png b/emojis/lcc_outil.png new file mode 100644 index 0000000000000000000000000000000000000000..2e0e8d57fc5e3adb700ba0622bb15fae88abe4b0 GIT binary patch literal 14433 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 TQbLRA`xyW!CCO@Wli>dWUj+P< literal 0 HcmV?d00001 diff --git a/emojis/lcc_outil_ep.png b/emojis/lcc_outil_ep.png new file mode 100644 index 0000000000000000000000000000000000000000..4e3d97f0273971831360be4f81f40bfc7a86ca15 GIT binary patch literal 13897 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 LWvLoT)3E;wRy_33 literal 0 HcmV?d00001 diff --git a/emojis/lcc_secu.png b/emojis/lcc_secu.png new file mode 100644 index 0000000000000000000000000000000000000000..f07034c2b928b8face864cc3783668bac4ad89d7 GIT binary patch literal 13478 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 F{}<3o3=;qV literal 0 HcmV?d00001 diff --git a/emojis/lcc_web.png b/emojis/lcc_web.png new file mode 100644 index 0000000000000000000000000000000000000000..e04876661551b9e40037a329ae5a4c1b0cd3958a GIT binary patch literal 7240 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]+>)\\s*(\\((?[^)]+)\\))?.*$", - CASE_INSENSITIVE | DOTALL); - - // This patten works against the generated markdown. Must be kept in sync with SHOW_NOTE_PATTERN. - private static final Pattern CATEGORY_ERASER_PATTERN = - Pattern.compile( - "^(?.*?\\(https?://[^)]+\\))(?\\s*\\([^)]+\\))?(?.*)$", - CASE_INSENSITIVE | DOTALL); - private final SlackThread thread; - private final String markdown; - private final Matcher urlMatcher; public ShowNote(SlackThread thread) { this.thread = requireNonNull(thread); - this.markdown = thread.asMarkdown(); - this.urlMatcher = SHOW_NOTE_PATTERN.matcher(thread.text()); } - public boolean isShowNote() { - boolean userMessage = !thread.isAppMessage(); - boolean containsLink = urlMatcher.matches(); - boolean hasNoMention = !thread.hasMention(); - return containsLink && userMessage && hasNoMention; - } + public ShowNoteCategory category() { + ShowNoteCategory category = null; - public String timestamp() { - return thread.timestamp(); + for (String reaction : thread.reactions()) { + Optional guessed = ShowNoteCategory.find(reaction); + if (guessed.isPresent()) { + category = guessed.get(); + } + } + + return category; } - public String text() { - Optional category = ShowNoteCategory.find(urlMatcher.group("category")); + public boolean isShowNote() { + if (thread.isAppMessage()) { + return false; // application or bot message + } - if (category.isPresent()) { - Matcher markdownMatcher = CATEGORY_ERASER_PATTERN.matcher(markdown); - if (markdownMatcher.matches()) { - return markdownMatcher.replaceFirst("${before}${after}"); + ShowNoteCategory category = category(); + if (category == null) { + if (thread.hasMention()) { + return false; + } else { + return thread.hasLink(); } } - return markdown; + return category != EXCLUDE; } - public ShowNoteCategory category() { - String category = urlMatcher.group("category"); - return ShowNoteCategory.find(category).orElse(ShowNoteCategory.NEWS); + public String timestamp() { + return thread.timestamp(); + } + + public String text() { + return thread.asMarkdown(); } public List comments() { return thread.replies().stream() - .filter(not(SlackReply::hasMention)) + .filter( + reply -> { + if (reply.isAppMessage()) { + return false; + } else if (reply.reactions().contains(EXCLUDE.reaction())) { + return false; + } else if (reply.reactions().contains(INCLUDE.reaction())) { + return true; + } else { + return !reply.hasMention(); + } + }) .map(SlackReply::asMarkdown) .flatMap(String::lines) .filter(not(String::isBlank)) diff --git a/src/main/java/com/lescastcodeurs/bot/ShowNoteCategory.java b/src/main/java/com/lescastcodeurs/bot/ShowNoteCategory.java index f654d11..1e48538 100644 --- a/src/main/java/com/lescastcodeurs/bot/ShowNoteCategory.java +++ b/src/main/java/com/lescastcodeurs/bot/ShowNoteCategory.java @@ -2,62 +2,39 @@ import static java.util.Objects.requireNonNull; -import java.util.Arrays; -import java.util.List; import java.util.Optional; /** Les cast codeurs podcast categories (by order of appearance in the show notes). */ public enum ShowNoteCategory { - LANGUAGES("Langages", "lang", "langage", "langages", "langs", "language", "languages"), - LIBRARIES("Librairies", "lib", "libs", "libraries", "librairies", "librairie", "library"), - INFRASTRUCTURE("Infrastructure", "infra", "infrastructure"), - CLOUD("Cloud", "cloud", "iaas"), - WEB("Web", "web", "www"), - DATA("Data", "data", "db"), - TOOLING("Outillage", "outil", "outils", "tool", "tools", "outillage", "tooling"), - ARCHITECTURE("Architecture", "archi", "arch", "architecture", "architectures"), - METHODOLOGIES( - "Méthodologies", - "methodo", - "metodo", - "methode", - "methodologie", - "methodologies", - "methodology"), - SECURITY("Sécurité", "secu", "sec", "securite", "security", "secure"), - SOCIETY( - "Loi, société et organisation", - "loi", - "law", - "societe", - "society", - "org", - "orga", - "organisation", - "organization"), - TOOL_OF_THE_EPISODE("Outils de l’épisode", "outil-ep", "outil-episode"), - BEGINNERS("Rubrique débutant", "debutant", "debutants", "beginner", "beginners"), - CONFERENCES("Conférences", "conf", "conferences", "conference"), - // This category must not be used in template. - IGNORED("Ignoré", "ignore", "ignorer", "ignored", "exclu", "exclude", "exclure"), - // Fall-back for unrecognized categories. - NEWS("Non catégorisé", "news", "nouvelles", "nouvelle"); + LANGUAGES("Langages", "lcc_lang"), + LIBRARIES("Librairies", "lcc_lib"), + INFRASTRUCTURE("Infrastructure", "lcc_infra"), + CLOUD("Cloud", "lcc_cloud"), + WEB("Web", "lcc_web"), + DATA("Data", "lcc_data"), + TOOLING("Outillage", "lcc_outil"), + ARCHITECTURE("Architecture", "lcc_archi"), + METHODOLOGIES("Méthodologies", "lcc_methodo"), + SECURITY("Sécurité", "lcc_secu"), + SOCIETY("Loi, société et organisation", "lcc_loi"), + TOOL_OF_THE_EPISODE("Outils de l’épisode", "lcc_outil_ep"), + BEGINNERS("Rubrique débutant", "lcc_debutant"), + CONFERENCES("Conférences", "lcc_conf"), + + // special categories + INCLUDE( + "Messages inclus", + "lcc_include"), // Fall-back for unknown categories / force message inclusion. + EXCLUDE("Messages exclus", "lcc_exclude"); // Force message exclusion. private final String description; - private final List labels; - - /** - * Returns the category matching the given non-null label, or {@link #NEWS} if the label does not - * match any category. - * - *

Note that label are case-sensitive and accents-insensitive. - */ - public static Optional find(String label) { - if (label != null) { - String normalized = StringUtils.normalize(label); + private final String reaction; + /** Returns the category matching the given non-null label. */ + public static Optional find(String reaction) { + if (reaction != null) { for (ShowNoteCategory category : values()) { - if (category.labels().contains(normalized)) { + if (category.reaction.equals(reaction)) { return Optional.of(category); } } @@ -66,29 +43,16 @@ public static Optional find(String label) { return Optional.empty(); } - ShowNoteCategory(String description, String... labels) { + ShowNoteCategory(String description, String reaction) { this.description = requireNonNull(description); - this.labels = List.copyOf(Arrays.stream(labels).map(StringUtils::normalize).toList()); - - if (this.labels.size() < 2) { - throw new IllegalArgumentException( - "at least two labels are required (formatting help is easier with this constraint)"); - } + this.reaction = requireNonNull(reaction); } public String description() { return description; } - public String mainLabel() { - return labels.get(0); - } - - public List alternateLabels() { - return labels.subList(1, labels.size()); - } - - public List labels() { - return labels; + public String reaction() { + return reaction; } } diff --git a/src/main/java/com/lescastcodeurs/bot/ShowNotes.java b/src/main/java/com/lescastcodeurs/bot/ShowNotes.java index 53cc293..480f537 100644 --- a/src/main/java/com/lescastcodeurs/bot/ShowNotes.java +++ b/src/main/java/com/lescastcodeurs/bot/ShowNotes.java @@ -31,11 +31,13 @@ public List notes() { return notes; } - public List notes(String label) { - ShowNoteCategory category = - ShowNoteCategory.find(label) - .orElseThrow( - () -> new IllegalArgumentException("no category found for label " + label)); - return notes().stream().filter(n -> n.category() == category).toList(); + public List notes(String name) { + ShowNoteCategory category = ShowNoteCategory.valueOf(name); + return notes().stream() + .filter( + n -> + n.category() == category + || (n.category() == null && category == ShowNoteCategory.INCLUDE)) + .toList(); } } diff --git a/src/main/java/com/lescastcodeurs/bot/SlackBotAction.java b/src/main/java/com/lescastcodeurs/bot/SlackBotAction.java index dac7785..eff2cac 100644 --- a/src/main/java/com/lescastcodeurs/bot/SlackBotAction.java +++ b/src/main/java/com/lescastcodeurs/bot/SlackBotAction.java @@ -1,7 +1,7 @@ package com.lescastcodeurs.bot; -import static com.lescastcodeurs.bot.ShowNoteCategory.IGNORED; -import static com.lescastcodeurs.bot.ShowNoteCategory.NEWS; +import static com.lescastcodeurs.bot.ShowNoteCategory.EXCLUDE; +import static com.lescastcodeurs.bot.ShowNoteCategory.INCLUDE; import static java.util.Arrays.stream; import static java.util.Comparator.comparingInt; import static java.util.stream.Collectors.joining; @@ -44,28 +44,20 @@ public String response() { 20, List.of("category", "categorie", "label", "libelle", "tag"), """ - Les catégories et leurs libellés sont : + Les catégories et leur réaction associée sont : • %s - • Ignoré: les liens catégorisés avec `%s` n'apparaissent pas dans les notes de l'épisode (%s). - • Non catégorisé: laissé sans catégorie ou catégorisé avec un libellé inconnu + + Les réactions `lcc_include` (:lcc_include:) et `lcc_exclude` (:lcc_exclude:) permettent de forcer l'inclusion ou l'exclusion d'un message. """ .formatted( stream(ShowNoteCategory.values()) - .filter(c -> c != NEWS && c != IGNORED) + .filter(c -> c != INCLUDE && c != EXCLUDE) .map( c -> - "%s : `%s` (%s)" - .formatted( - c.description(), - c.mainLabel(), - c.alternateLabels().stream() - .map("`%s`"::formatted) - .collect(joining(", ")))) - .collect(joining("\n• ")), - IGNORED.mainLabel(), - IGNORED.alternateLabels().stream().map("`%s`"::formatted).collect(joining(", "))), + "%s : `%s` (:%s:)".formatted(c.description(), c.reaction(), c.reaction())) + .collect(joining("\n• "))), List.of("@lcc, montre-moi les catégories.", "@lcc, show me the categories."), - "Affiche la liste des catégories avec leurs libellés associés (multilignes, ordre de déclaration)."), + "Affiche la liste des catégories avec leur réaction associée."), GENERATE_SHOW_NOTES( 3, @@ -75,19 +67,19 @@ public String response() { """ Génère les notes de l'épisode à partir des messages de ce channel et publie le résultat sur GitHub. Les show notes peuvent être publiées plusieurs fois: le fichier markdown est alors mis à jour. À noter : • Un channel Slack doit être dédié à un seul épisode. - • Un thread de messages est reporté dans les show notes si son premier message contient au moins un lien et ne contient aucune mention à un utilisateur. - • Les réponses aux liens peuvent être de simples phrases comme des listes. Elles sont reportées dans les show notes que si elles ne contiennent aucune mention à un utilisateur. + • Un thread de messages est automatiquement reporté dans les show notes si son premier message contient au moins un lien et ne contient aucune . + • Les réponses aux threads peuvent être de simples phrases comme des listes. Elles sont reportées dans les show notes que si elles ne contiennent aucune . • La formatage suivant est conservé : *gras*, _italique_, ~barré~, `code` et citations (sur le premier message du thread uniquement). - • Les liens peuvent être catégorisés à l'aide de libellés (ex. `Nouveau JEP https://www.java.com (lang)`). Les catégories supportées peuvent être listées grâce à la commande dédiée (`@lcc, affiche les catégories.`). + • Les liens peuvent être catégorisés à l'aide de . Les catégories supportées peuvent être listées grâce à la commande dédiée (`@lcc, affiche les catégories.`). """, Constants.GENERATE_SHOW_NOTES_ADDRESS), - UNKNOWN(999, List.of(), null, List.of(), null) { - @Override - public String response() { - return "Désolé, je n'ai pas compris la commande. %s".formatted(HELP.response()); - } - + UNKNOWN( + 999, + List.of(), + "Désolé, je n'ai pas compris la commande. Pour voir l'aide utilisez la commande dédiée (`@lcc, à l'aide !`)", + List.of(), + null) { @Override protected boolean canReplyTo(String request) { return true; diff --git a/src/main/java/com/lescastcodeurs/bot/SlackClient.java b/src/main/java/com/lescastcodeurs/bot/slack/SlackClient.java similarity index 95% rename from src/main/java/com/lescastcodeurs/bot/SlackClient.java rename to src/main/java/com/lescastcodeurs/bot/slack/SlackClient.java index aa8ff46..6f9c249 100644 --- a/src/main/java/com/lescastcodeurs/bot/SlackClient.java +++ b/src/main/java/com/lescastcodeurs/bot/slack/SlackClient.java @@ -1,11 +1,11 @@ -package com.lescastcodeurs.bot; +package com.lescastcodeurs.bot.slack; import static com.lescastcodeurs.bot.Constants.SLACK_BOT_TOKEN; import static java.util.Comparator.*; import static java.util.Objects.requireNonNull; import static org.slf4j.LoggerFactory.getLogger; -import com.lescastcodeurs.bot.slack.SlackThread; +import com.lescastcodeurs.bot.UncheckedSlackApiException; import com.slack.api.Slack; import com.slack.api.methods.MethodsClient; import com.slack.api.methods.SlackApiException; @@ -68,7 +68,10 @@ public List history(String channel) { return SlackApi.check( () -> slack.conversationsHistory( - ConversationsHistoryRequest.builder().channel(channel).build())) + ConversationsHistoryRequest.builder() + .channel(channel) + .includeAllMetadata(true) + .build())) .getMessages() .stream() .sorted(CHRONOLOGICAL) diff --git a/src/main/java/com/lescastcodeurs/bot/slack/SlackMessage.java b/src/main/java/com/lescastcodeurs/bot/slack/SlackMessage.java index b30091a..d777550 100644 --- a/src/main/java/com/lescastcodeurs/bot/slack/SlackMessage.java +++ b/src/main/java/com/lescastcodeurs/bot/slack/SlackMessage.java @@ -3,6 +3,8 @@ import static com.lescastcodeurs.bot.StringUtils.isNotBlank; import com.slack.api.model.Message; +import com.slack.api.model.Reaction; +import java.util.List; import java.util.regex.Pattern; /** Hold required information from a Slack message. */ @@ -32,11 +34,16 @@ abstract sealed class SlackMessage permits SlackThread, SlackReply { // See https://github.com/slackhq/slack-api-docs/issues/7#issuecomment-67913241. private final String timestamp; private final String text; + private final List reactions; private final boolean appMessage; SlackMessage(Message message) { this.timestamp = message.getTs() == null ? DEFAULT_TS : message.getTs(); this.text = message.getText() == null ? "" : message.getText(); + this.reactions = + message.getReactions() == null + ? List.of() + : message.getReactions().stream().map(Reaction::getName).toList(); this.appMessage = isNotBlank(message.getAppId()) || isNotBlank(message.getBotId()); } @@ -48,6 +55,10 @@ public final String text() { return text; } + public final List reactions() { + return reactions; + } + /** * Convert this message {@link #text()} as markdown. * @@ -74,6 +85,10 @@ public final boolean isAppMessage() { return appMessage; } + public boolean hasLink() { + return text.contains(" -[Faire un crowdcast ou une crowdquestion](https://lescastcodeurs.com/crowdcasting/) -Contactez-nous via twitter +Soutenez Les Cast Codeurs sur Patreon +[Faire un crowdcast ou une crowdquestion](https://lescastcodeurs.com/crowdcasting/) +Contactez-nous via twitter sur le groupe Google diff --git a/src/test/java/com/lescastcodeurs/bot/ShowNoteCategoryTest.java b/src/test/java/com/lescastcodeurs/bot/ShowNoteCategoryTest.java index 31669ab..4ea5070 100644 --- a/src/test/java/com/lescastcodeurs/bot/ShowNoteCategoryTest.java +++ b/src/test/java/com/lescastcodeurs/bot/ShowNoteCategoryTest.java @@ -1,7 +1,6 @@ package com.lescastcodeurs.bot; -import static com.lescastcodeurs.bot.ShowNoteCategory.*; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; @@ -13,25 +12,4 @@ void acceptNullOrBlank() { assertTrue(ShowNoteCategory.find("").isEmpty()); assertTrue(ShowNoteCategory.find("\n \t").isEmpty()); } - - @Test - void caseInsensitive() { - assertEquals(CLOUD, ShowNoteCategory.find("cloud").get()); - assertEquals(CLOUD, ShowNoteCategory.find("CLOUD").get()); - assertEquals(CLOUD, ShowNoteCategory.find("ClOuD").get()); - } - - @Test - void accentInsensitive() { - assertEquals(SECURITY, ShowNoteCategory.find("securite").get()); - assertEquals(SECURITY, ShowNoteCategory.find("sécurité").get()); - assertEquals(SECURITY, ShowNoteCategory.find("sécurite").get()); - } - - @Test - void trimInsensitive() { - assertEquals(CLOUD, ShowNoteCategory.find(" cloud").get()); - assertEquals(CLOUD, ShowNoteCategory.find("cloud ").get()); - assertEquals(CLOUD, ShowNoteCategory.find("\t cloud \n").get()); - } } diff --git a/src/test/java/com/lescastcodeurs/bot/ShowNoteTest.java b/src/test/java/com/lescastcodeurs/bot/ShowNoteTest.java index 1c95d31..5f16e5b 100644 --- a/src/test/java/com/lescastcodeurs/bot/ShowNoteTest.java +++ b/src/test/java/com/lescastcodeurs/bot/ShowNoteTest.java @@ -6,123 +6,135 @@ import com.lescastcodeurs.bot.slack.Messages; import com.lescastcodeurs.bot.slack.SlackThread; import java.util.List; -import java.util.stream.Stream; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.Arguments; -import org.junit.jupiter.params.provider.MethodSource; -import org.junit.jupiter.params.provider.ValueSource; class ShowNoteTest { @Test - void messageCannotBeNull() { + void threadCannotBeNull() { assertThrows(NullPointerException.class, () -> new ShowNote(null)); } - @ParameterizedTest - @MethodSource("validShowNotes") - void validShowNotes(String text, String expectedMarkdown, ShowNoteCategory expectedCategory) { - ShowNote note = new ShowNote(new SlackThread(Messages.of(text), null)); + @Test + void appMessageIsNotShowNote() { + SlackThread message = + new SlackThread( + Messages.of("", null, "ABCD", null), List.of()); + var note = new ShowNote(message); + + assertFalse(note.isShowNote()); + } + + @Test + void botMessageIsNotShowNote() { + SlackThread message = + new SlackThread( + Messages.of("", null, null, "ABCD"), List.of()); + var note = new ShowNote(message); + + assertFalse(note.isShowNote()); + } + + @Test + void messageWithoutLinkAndWithoutCategoryIsNotShowNote() { + SlackThread message = new SlackThread(Messages.of("test", null), List.of()); + var note = new ShowNote(message); + + assertNull(note.category()); + assertFalse(note.isShowNote()); + } + + @Test + void messageWithoutLinkAndWithCategoryIsShowNote() { + SlackThread message = + new SlackThread(Messages.of("test", List.of(CLOUD.reaction())), List.of()); + var note = new ShowNote(message); + assertEquals(CLOUD, note.category()); assertTrue(note.isShowNote()); - assertEquals(expectedMarkdown, note.text()); - assertEquals(expectedCategory, note.category()); - } - - private static Stream validShowNotes() { - return Stream.of( - Arguments.of("", "[https://test.io](https://test.io)", NEWS), - Arguments.of("", "[http://test.io](http://test.io)", NEWS), - Arguments.of( - "", - "[https://test.io/2022/07/12/new/](https://test.io/2022/07/12/new/)", - NEWS), - Arguments.of( - "", - "[https://test.io/new.html](https://test.io/new.html)", - NEWS), - Arguments.of( - "", - "[https://test.io/?q=test&a=test](https://test.io/?q=test&a=test)", - NEWS), - Arguments.of( - "", - "[https://test.io/#fragment](https://test.io/#fragment)", - NEWS), - Arguments.of( - "", - "[https://test.io/some%20test/](https://test.io/some%20test/)", NEWS), - Arguments.of( - "", "[this is a test](https://test.io/)", NEWS), - Arguments.of(" (cloud)", "[https://test.io/](https://test.io/)", CLOUD), - Arguments.of( - " (unknown)", "[https://test.io/](https://test.io/) (unknown)", NEWS), - Arguments.of( - "this is a test : ", - "this is a test : [https://test.io/](https://test.io/)", - NEWS), - Arguments.of( - " : this is a test", - "[https://test.io/](https://test.io/) : this is a test", - NEWS), - Arguments.of( - " et ", - "[test1](https://test1.io) et [test2](https://test2.io)", - NEWS), - Arguments.of( - " et (cloud)", - "[test1](https://test1.io) et [test2](https://test2.io) (cloud)", - NEWS), - Arguments.of( - " (lib) et (cloud)", - "[test1](https://test1.io) et [test2](https://test2.io) (cloud)", - LIBRARIES), - Arguments.of( - "\nthis\nis\na\ntest", - "[https://test.io/](https://test.io/)\nthis\nis\na\ntest", - NEWS), - Arguments.of( - "bla bla \n (cloud) \nbla bla (test)", - "bla bla \n[this is a test](https://test.io/d/a.txt?a=b&c=d#!#e=f%20g) \nbla bla [link](https://link.to) (test)", - CLOUD)); - } - - @ParameterizedTest - @ValueSource( - strings = { - "", - "message without link", - "message with plain link : https://lescastcodeurs.com/", - "message with something that is not a ", - "message with <@user> mention", - "message with mention", - "message with mention" - }) - void invalidShowNotes(String message) { - SlackThread thread = new SlackThread(Messages.of(message), List.of()); - ShowNote note = new ShowNote(thread); + assertEquals("test", note.text()); + } + + @Test + void messageWithLinkAndWithoutCategoryIsShowNote() { + SlackThread message = new SlackThread(Messages.of(""), List.of()); + var note = new ShowNote(message); + + assertNull(note.category()); + assertTrue(note.isShowNote()); + assertEquals("[https://test.io](https://test.io)", note.text()); + } + + @Test + void messageWithLinkAndWithUserMentionAndWithoutCategoryIsNotShowNote() { + SlackThread message = new SlackThread(Messages.of(" <@XXX>"), List.of()); + var note = new ShowNote(message); + + assertNull(note.category()); + assertFalse(note.isShowNote()); + } + + @Test + void messageWithLinkAndWithChannelMentionAndWithoutCategoryIsNotShowNote() { + SlackThread message = new SlackThread(Messages.of(" "), List.of()); + var note = new ShowNote(message); + + assertNull(note.category()); + assertFalse(note.isShowNote()); + } + + @Test + void messageWithLinkAndWithHereMentionAndWithoutCategoryIsNotShowNote() { + SlackThread message = new SlackThread(Messages.of(" "), List.of()); + var note = new ShowNote(message); + assertNull(note.category()); assertFalse(note.isShowNote()); } @Test - void appMessageAreInvalid() { + void messageWithLinkAndWithCategoryIsShowNote() { SlackThread message = - new SlackThread( - Messages.of(null, "", "ABCD", null), List.of()); + new SlackThread(Messages.of("", List.of(CLOUD.reaction())), List.of()); + var note = new ShowNote(message); + + assertEquals(CLOUD, note.category()); + assertTrue(note.isShowNote()); + assertEquals("[https://test.io](https://test.io)", note.text()); + } + + @Test + void messageWithLinkAndExplicitlyIgnoredIsNotShowNote() { + SlackThread message = + new SlackThread(Messages.of("", List.of(EXCLUDE.reaction())), List.of()); var note = new ShowNote(message); + assertEquals(EXCLUDE, note.category()); assertFalse(note.isShowNote()); } @Test - void botMessageAreInvalid() { + void lastReactionWins1() { SlackThread message = new SlackThread( - Messages.of(null, "", null, "ABCD"), List.of()); + Messages.of("", List.of(EXCLUDE.reaction(), CLOUD.reaction())), + List.of()); var note = new ShowNote(message); + assertEquals(CLOUD, note.category()); + assertTrue(note.isShowNote()); + assertEquals("[https://test.io](https://test.io)", note.text()); + } + + @Test + void lastReactionWins2() { + SlackThread message = + new SlackThread( + Messages.of("", List.of(CLOUD.reaction(), EXCLUDE.reaction())), + List.of()); + var note = new ShowNote(message); + + assertEquals(EXCLUDE, note.category()); assertFalse(note.isShowNote()); } @@ -141,6 +153,21 @@ void repliesAreProperlyTransformedToList() { note.comments()); } + @Test + void appAndBotRepliesAreFilteredOut() { + SlackThread message = + new SlackThread( + Messages.of(""), + List.of( + Messages.of("note 1"), + Messages.of("app reply", List.of(), "XXX", null), + Messages.of("bot reply", List.of(), null, "XXX"), + Messages.of("note 2"))); + var note = new ShowNote(message); + + assertEquals(List.of("- note 1", "- note 2"), note.comments()); + } + @Test void repliesWithMentionsAreFilteredOut() { SlackThread message = @@ -156,4 +183,33 @@ void repliesWithMentionsAreFilteredOut() { assertEquals(List.of("- note 1", "- note 2"), note.comments()); } + + @Test + void repliesWithMentionsAreNotFilteredIfExplicitlyIncluded() { + SlackThread message = + new SlackThread( + Messages.of(""), + List.of( + Messages.of("note 1"), + Messages.of("<@user> mention", List.of(INCLUDE.reaction())), + Messages.of("note 2"))); + var note = new ShowNote(message); + + assertEquals(List.of("- note 1", "- <@user> mention", "- note 2"), note.comments()); + } + + @Test + void explicitlyExcludedRepliesAreFilteredOut() { + SlackThread message = + new SlackThread( + Messages.of(""), + List.of( + Messages.of("note 1"), + Messages.of("excluded 1", List.of(EXCLUDE.reaction())), + Messages.of("excluded 2", List.of(EXCLUDE.reaction())), + Messages.of("note 2"))); + var note = new ShowNote(message); + + assertEquals(List.of("- note 1", "- note 2"), note.comments()); + } } diff --git a/src/test/java/com/lescastcodeurs/bot/ShowNotesTest.java b/src/test/java/com/lescastcodeurs/bot/ShowNotesTest.java index d5d5706..548d005 100644 --- a/src/test/java/com/lescastcodeurs/bot/ShowNotesTest.java +++ b/src/test/java/com/lescastcodeurs/bot/ShowNotesTest.java @@ -1,6 +1,5 @@ package com.lescastcodeurs.bot; -import static java.util.Arrays.asList; import static org.junit.jupiter.api.Assertions.*; import com.lescastcodeurs.bot.slack.Messages; @@ -21,7 +20,7 @@ class ShowNotesTest { @Test void generateEmpty() { - String rendered = notes.render(new ShowNotes(history())); + String rendered = notes.render(new ShowNotes(List.of())); assertNotNull(rendered); assertTrue(rendered.startsWith("---")); @@ -42,46 +41,79 @@ void generateEmpty() { @Test void generateWithNotes() { - List messages = new ArrayList<>(); - messages.add("random comment 1"); + List threads = new ArrayList<>(); + threads.add(thread("random comment 1")); for (ShowNoteCategory category : ShowNoteCategory.values()) { - String url = " (" + category.mainLabel() + ")"; - messages.add(url); + threads.add(thread("", category)); } - messages.add("random comment 2"); - messages.add("@lcc generate show notes"); + threads.add(thread("random comment 2")); + threads.add(thread("@lcc generate show notes")); - String rendered = notes.render(new ShowNotes(history(messages))); + String rendered = notes.render(new ShowNotes(threads)); assertNotNull(rendered); assertTrue(rendered.startsWith("---")); - for (ShowNoteCategory category : ShowNoteCategory.values()) { - String url = "https://lescastcodeurs.com/" + category; - assertEquals(category != ShowNoteCategory.IGNORED, rendered.contains(url)); - } - assertTrue(rendered.contains("- comment 1")); - assertTrue(rendered.contains("- comment 2")); - assertTrue(rendered.contains("- comment 3")); - assertTrue(rendered.endsWith("\n")); + assertContains( + rendered, + "### Non catégorisées\n\n[https://lescastcodeurs.com/INCLUDE](https://lescastcodeurs.com/INCLUDE)"); + assertContains( + rendered, + "### Langages\n\n[https://lescastcodeurs.com/LANGUAGES](https://lescastcodeurs.com/LANGUAGES)"); + assertContains( + rendered, + "### Librairies\n\n[https://lescastcodeurs.com/LIBRARIES](https://lescastcodeurs.com/LIBRARIES)"); + assertContains( + rendered, + "### Infrastructure\n\n[https://lescastcodeurs.com/INFRASTRUCTURE](https://lescastcodeurs.com/INFRASTRUCTURE)"); + assertContains( + rendered, + "### Cloud\n\n[https://lescastcodeurs.com/CLOUD](https://lescastcodeurs.com/CLOUD)"); + assertContains( + rendered, "### Web\n\n[https://lescastcodeurs.com/WEB](https://lescastcodeurs.com/WEB)"); + assertContains( + rendered, "### Data\n\n[https://lescastcodeurs.com/DATA](https://lescastcodeurs.com/DATA)"); + assertContains( + rendered, + "### Outillage\n\n[https://lescastcodeurs.com/TOOLING](https://lescastcodeurs.com/TOOLING)"); + assertContains( + rendered, + "### Architecture\n\n[https://lescastcodeurs.com/ARCHITECTURE](https://lescastcodeurs.com/ARCHITECTURE)"); + assertContains( + rendered, + "### Méthodologies\n\n[https://lescastcodeurs.com/METHODOLOGIES](https://lescastcodeurs.com/METHODOLOGIES)"); + assertContains( + rendered, + "### Sécurité\n\n[https://lescastcodeurs.com/SECURITY](https://lescastcodeurs.com/SECURITY)"); + assertContains( + rendered, + "### Loi, société et organisation\n\n[https://lescastcodeurs.com/SOCIETY](https://lescastcodeurs.com/SOCIETY)"); + assertContains( + rendered, + "## Outils de l’épisode\n\n[https://lescastcodeurs.com/TOOL_OF_THE_EPISODE](https://lescastcodeurs.com/TOOL_OF_THE_EPISODE)"); + assertContains( + rendered, + "## Rubrique débutant\n\n[https://lescastcodeurs.com/BEGINNERS](https://lescastcodeurs.com/BEGINNERS)"); + assertContains( + rendered, + "## Conférences\n\n[Nom de la conf du x au y mois à Ville]() - [CfP]() jusqu’à y mois\nTODO: reprendre celles de l’épisode d’avant\n\n[https://lescastcodeurs.com/CONFERENCES](https://lescastcodeurs.com/CONFERENCES)"); assertFalse(rendered.contains("random comment")); assertFalse(rendered.contains("generate show notes")); } - private List history(String... messages) { - return history(asList(messages)); + private void assertContains(String actual, String expected) { + assertTrue(actual.contains(expected)); + } + + private SlackThread thread(String message) { + return new SlackThread( + Messages.of(message), + List.of(Messages.of("comment 1"), Messages.of("comment 2"), Messages.of("comment 3"))); } - private List history(List messages) { - return messages.stream() - .map( - message -> - new SlackThread( - Messages.of(message), - List.of( - Messages.of("comment 1"), - Messages.of("comment 2"), - Messages.of("comment 3")))) - .toList(); + private SlackThread thread(String message, ShowNoteCategory category) { + return new SlackThread( + Messages.of(message, List.of(category.reaction()), null, null), + List.of(Messages.of("comment 1"), Messages.of("comment 2"), Messages.of("comment 3"))); } } diff --git a/src/test/java/com/lescastcodeurs/bot/slack/Messages.java b/src/test/java/com/lescastcodeurs/bot/slack/Messages.java index 7609484..cf87919 100644 --- a/src/test/java/com/lescastcodeurs/bot/slack/Messages.java +++ b/src/test/java/com/lescastcodeurs/bot/slack/Messages.java @@ -1,6 +1,8 @@ package com.lescastcodeurs.bot.slack; import com.slack.api.model.Message; +import com.slack.api.model.Reaction; +import java.util.List; public final class Messages { @@ -9,19 +11,39 @@ private Messages() { } public static Message of(String text) { - return of(SlackMessage.DEFAULT_TS, text); + return of(text, null); } - public static Message of(String timestamp, String text) { - return of(timestamp, text, null, null); + public static Message of(String text, List reactions) { + return of(text, reactions, null, null); } - public static Message of(String timestamp, String text, String appId, String botId) { + public static Message of(String text, List reactions, String appId, String botId) { + return of(SlackMessage.DEFAULT_TS, text, reactions, appId, botId); + } + + public static Message of( + String ts, String text, List reactions, String appId, String botId) { Message message = new Message(); - message.setTs(timestamp); + message.setTs(ts); message.setText(text); message.setAppId(appId); message.setBotId(botId); + + if (reactions != null) { + message.setReactions( + reactions.stream() + .map( + name -> { + Reaction reaction = new Reaction(); + reaction.setName(name); + reaction.setCount(1); + reaction.setUsers(List.of("XXX")); + return reaction; + }) + .toList()); + } + return message; } } diff --git a/src/test/java/com/lescastcodeurs/bot/slack/SlackMessageTest.java b/src/test/java/com/lescastcodeurs/bot/slack/SlackMessageTest.java index ca33088..3542ac6 100644 --- a/src/test/java/com/lescastcodeurs/bot/slack/SlackMessageTest.java +++ b/src/test/java/com/lescastcodeurs/bot/slack/SlackMessageTest.java @@ -2,13 +2,14 @@ import static org.junit.jupiter.api.Assertions.*; +import java.util.List; import org.junit.jupiter.api.Test; class SlackMessageTest { @Test void nullTimestampIsReplacedWithNonNull() { - SlackMessage msg = new SlackReply(Messages.of(null, "text")); + SlackMessage msg = new SlackReply(Messages.of(null, "text", List.of(), null, null)); assertNotNull(msg.timestamp()); } @@ -158,4 +159,27 @@ void recognizeChannelMentionInMainMessage() { assertTrue(message.hasMention()); } + + @Test + void recognizeLinkAbsence() { + SlackMessage message = new SlackReply(Messages.of("test message")); + + assertFalse(message.hasLink()); + } + + @Test + void recognizeSimpleLinkPresence() { + SlackMessage message = new SlackReply(Messages.of("test ")); + + assertTrue(message.hasLink()); + } + + @Test + void recognizeTitledLinkPresence() { + SlackMessage message = + new SlackReply( + Messages.of("test ")); + + assertTrue(message.hasLink()); + } }