From a2557ccbe66fdc08d74e82adc0b7514bbcd451e3 Mon Sep 17 00:00:00 2001 From: Viraat Chandra Date: Sun, 24 Dec 2017 17:38:45 +0530 Subject: [PATCH] interactive bots: Create Mention bot. --- tools/run-mypy | 4 +- .../zulip_bots/bots/mention/__init__.py | 0 .../bots/mention/assets/mentions_demo.png | Bin 0 -> 95247 bytes zulip_bots/zulip_bots/bots/mention/doc.md | 32 +++++ .../bots/mention/fixtures/create_alert.json | 125 ++++++++++++++++++ .../bots/mention/fixtures/get_mentions.json | 15 +++ .../bots/mention/fixtures/mention.json | 73 ++++++++++ .../zulip_bots/bots/mention/mention.conf | 3 + zulip_bots/zulip_bots/bots/mention/mention.py | 103 +++++++++++++++ .../zulip_bots/bots/mention/test_mention.py | 34 +++++ 10 files changed, 388 insertions(+), 1 deletion(-) create mode 100644 zulip_bots/zulip_bots/bots/mention/__init__.py create mode 100644 zulip_bots/zulip_bots/bots/mention/assets/mentions_demo.png create mode 100644 zulip_bots/zulip_bots/bots/mention/doc.md create mode 100644 zulip_bots/zulip_bots/bots/mention/fixtures/create_alert.json create mode 100644 zulip_bots/zulip_bots/bots/mention/fixtures/get_mentions.json create mode 100644 zulip_bots/zulip_bots/bots/mention/fixtures/mention.json create mode 100644 zulip_bots/zulip_bots/bots/mention/mention.conf create mode 100644 zulip_bots/zulip_bots/bots/mention/mention.py create mode 100644 zulip_bots/zulip_bots/bots/mention/test_mention.py diff --git a/tools/run-mypy b/tools/run-mypy index e738e43..8a28c11 100755 --- a/tools/run-mypy +++ b/tools/run-mypy @@ -74,7 +74,9 @@ force_include = [ "zulip_bots/zulip_bots/bots/yoda/yoda.py", "zulip_bots/zulip_bots/bots/yoda/test_yoda.py", "zulip_bots/zulip_bots/bots/dialogflow/dialogflow.py", - "zulip_bots/zulip_bots/bots/dialogflow/test_dialogflow.py" + "zulip_bots/zulip_bots/bots/dialogflow/test_dialogflow.py", + "zulip_bots/zulip_bots/bots/mention/mention.py", + "zulip_bots/zulip_bots/bots/mention/test_mention.py" ] parser = argparse.ArgumentParser(description="Run mypy on files tracked by git.") diff --git a/zulip_bots/zulip_bots/bots/mention/__init__.py b/zulip_bots/zulip_bots/bots/mention/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/zulip_bots/zulip_bots/bots/mention/assets/mentions_demo.png b/zulip_bots/zulip_bots/bots/mention/assets/mentions_demo.png new file mode 100644 index 0000000000000000000000000000000000000000..6eb83ab749ba04e4137243b6673f1c7f9dda1aaa GIT binary patch literal 95247 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

sG{KNhJ{Oii28yq9i8SRPFi$d5Rk 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 QdSZkaOi zk0ghXQkEQDm7pf!jUn*IZW83?rLYNW*N87^cd;Zob*`^D5JR1_AH*>m=2;89U)*|m zhSVoC_3lL$550uo!q7s>)*cJt<$|f9|2{O=cWuM6=*(Y*vm(l5CyE*k00{mx%&e+w zN5iW;BqiYb6!leo| zj}}V(`$Mn-ovf6k$cs;Ic35@ap4s)K6uv=_x$C^c6L!Y8Xk7J6#=py2Wk%YyYn$8{ zWGAk!X@I0N)wfP=SPhO}TxF15Nls&^;DjnA-B?n`dc@pLOwS-7Uy={cKnvNdyf_05 zY6a6Wj%TY^zjd-x`i@U8a-GP<4tdtV{{2zdO-;yk@=!72v=(R(DhJu=?W7Eh!0L6;`@82Nm6q|sXdU4=l zo7s37yAtSFJKsdhp=>G8T>doZQ2ig?q#hy@>&X+=R+#ReS#w8_v1QUh{Vp>bOEOl3 zA?>8xFxG)IvFWG;@hG(y#>eqceY-uVRr}=2d^jDQoIpPN8e67&pvl4Jv+;!r`0M!5 z3F*ZL4%ZCH%GkcKNYJ!(OGz&h#Q>D=+u>>Ib^;K6EN;nlQNInCYvl@2${K}$w%`;? zKCzcZTrj%D#mh`?EYeGo zK%%V=_4zIOdMyU4a8q`8t1#4T5C?um(*>c5OC*C3_gfe}4|g2%1f58tWk&r)_)F z4*Stx1yb&k=Xk^}xua7ut%C^>4PG^WFf4DaZhkhR0jh+aSAP-3R$EKykZN@CSkt>> zkZ}IMwk&HX3k&an;1p-Jeif8wZtT8-gtRhGi;t*bp_U`@@MH*9ox%rU$lV~r3j6gUz__;g zd=;v)x8}!#`wl^0!S7>lj_-#g18nWR%2IPW=wZqJR=W5kG@T^3M{s1!(!cOpq)ObI=%l3m13Dx{NBVWT{^8+THm-;Ca%mywg!} zv!0dm+c@d$@KUX1iyy7C4Xgi+)A(l*dfS(F9 zWr~})*UY;cbKH< z?l!Usni|cbIP{Qji%>rmkvD8s@rVzikoxCtR4YKUV)w&nN#=vFz5Km)$Fl{tA`V$y zT=Wh{ciX;w{TsaWNVdeI!~FHNdpL>gA7=p)G)UP>iH9D8xb!B9wbtHvKXl+1P%E z63(ZKAwa~~{*)cxVbnoaJKMdB>i?-Tiytfvr&r~Yr*T-r#C=_<&>KcG(KtD%VG-Qd zmmR_Bo$=b&H=a!?!#SM(6*yG%Llnn^?MhRR4F9ueT7Qw(%{3Wx?BZUh{#6(|(%l2> zjFEZ77NQXcfJNXLZx~qysIuK62Wz{v&>BvA2j6Ek9IbzENfS&=KyKZ2-FQ~c7||1i ztaHauaJ^?85W~2^IE{(wCBwJ8yix_nMGARMW`*12R!T`H%}NUWKywp)5qB|386e$> z%bKQgzH+5GXUl=*-srqV$t?)-&$s;#`N3n6!zI+<-q#kF7wO2tpcHXZ7!i~y2L?ZI z3qW+l!@|KmqMYgj)Ss2H{+2Q3EA<|B16_S~RgWK(Mqc@i+lZ0zx0RP?L;gY@u9X>z z&buK26d_R;%Dqy91?Lm?z1a)Pg@f8#=VQHfByocWpX>zKDFxdP=co=5ke%I*zFWg7 zYbsB&)G{ew0-6aFiQdeBvOGh#fa&eZdfUnl;T#=lL>g9h*1n1XZB8-Bz`d*YIJ==j z-k`3Nn|6QkHqxL38a?D)veZ7(pxd^K6b#V`c7gl2;d$Ne8v=y4lgza@R@6y`e3(gYnwIA)OGis)!NC%pb6R&ky>?)0 zOUjKjYJF>ZPDVDJY4NP_b?V_6-de@x3ej%uk}Q{Jt72IrTSprCm4(gOwZWVZfF`5J zj1p*FdFc>`A^LYY3HJ_xX<|KFN9i>rjnUw6bz!<(sW8yf%!r_G05ltT-s6dyBOW(h zP#r}oBx(!VcWI}Ujn$~L8VdmeP!ou8BBv%0zOxGP+6us}Z4ks5%ZR@lB*5&MRxsc*XIxqmNF3yAFPLCPgzN;w6F9{H%9e$bM5la*4FY;pFAJonOt$`kX7jKY* zi~P&?mLn6ZOS;%A%IS8YmfjYm+g|t#bAwOspOrHTr)kSU@!3EsjWNv+bgzqT%e>1r zZpEkU!@5ffiags3)9yPLjST}k5A&`p#DsRM_ox|5c^aij_)BaqBE(_a?NU*qo{Jt* zfX*bW^90?op86yyk)qJtPKr}jN#99=tpZSfLxwM({q_m)Nu5$?(e}I#&WNzSfK97w zwrg`7hdf5-U?oL^KpkYBu5K0D8A zNx_mODNSadCdIGx<*9QMOY(2B!+kJRhz@VYK+v&uTV%_0yVim?CVJ}IPYy){ls?Z< z;*^*ZPOe`>*<>$nh6Mj@Q?D`j8Z)}N8A~LG0qdEI|M!>M@PBarv*Sno3k_cI>yrKL z5&wdKMSb%x#j}^fm&D{*(|$$W+x@8@5x;K36l~(hW}^SS?hy|EC%J^6b2JC{RYDF* z5W!_E)&j4#v!lp~w)j|ZTNlReq_%Y_TchvKi&Z243By*0#USKcyRoBo%xUmr-_r7p8|IgM@gRRK9dC-E+B~a6f z2xz3x86GYYfihP!b99YXIla7%ja}+h!z9gTUGnF)FC_RE8b|%+vCG3G(N8A3Q;|f9 za>+U#42TVG1EhWV6V{LBU+p*j4)6WGW`uosx|us#m)~xJfSug;t8Sn$>5X#TzyWegd$CMd@2oxoqe@9e7#`2%Mh#OnN0b}Ml7@HqYH_6ITgv85dVc-QxtBaXBNx&4EP54oow$Tno>OB@`VM;&M5x7ztQjvt$mecfy^ zF?+U2bu<6D0f5^GjOD7sRbR z?T?GxDx8nGt(To%$QLE6dQeyf&@Yox$mv%DsVBS}tP{+&7czk|@CL6Eq7$}TJLVHFV}C}J z4Hf75Hb?svM%+6vmID2==_Jw(=u{)SrxV&^XLrXFzwe_xV+v>ro-Ofi?t)<}QZ$rg zFJ|Suh+bINaAlsOIC}0{hI7KxSZI}!y}mKk7$|;irKrf31i%{j_>b1$W!Fod-4n3^ zH9G-y^dI2Ru*z-cb`%#nDOA|^MmvdfGd#KGlge(>%_Eh?8dY$UK;O)}EkGwI z37QXg*04$h-|p-yG9=na%-s5vdb_2c3CSLS(Q1sxELB#} zOuRc6i!s%Bp2lyQxp^v)g4UI>bA48Q^YvPf3ZiOTcHkS(F+P+d1Jo$9eM2`Gq$#|= zQXSyfKu5bdC_$Z;#6tdQm~h>BXuKD@&~+$#t^eb+^0145l~qLcA^-C$lo6cQ~-nU>@PXcW}2Z0+Q6qjSQiQsvV+?B2iK z!i)cIfp`p1=1p6xKYHbhtD7fzlfUwR3mg&c=gF}EDlzK}R}8eMTqgH7(L-!(8);J~ zmm^BY34VF2-RKa6p>M&CC6@?Lkl;QXzD6ZRDvG?GbyG%O%-=OHT2kdbcUWHr6nu<| zg1XlppP5^>P)oAzf2G$nNAy+rgOoTd(0tt7?Qd35UTO+FhkTYIl9E8Spfq{$dDTuK zKM<=Y>m>u36|Pqa-3o--hb0cwgqD@J1}ot--nr*(iY(E9GH za1aJvU?5k{0tcZ#9OP5W#{itk>A5Y&?@#p}APei?&j3?v$Snx)*YQA%TzoP~Ky{z9 z-={@1BTtoh1+eyWJLoLE0*7M#b4CEe1h0>$gf5SkB{pUc*4q|#8dmMXN@7?npjZVP zaI<}!*Jge%H!Rx!9D)#Ha1K|MsG)@rGH2v<5siHjy+bP_)5OJHYs_X2sJn-fZ}F&E z)6=#=m{;0%L7T>;8~S{GCkN8`j-9=ot)~!kAF&=XfE%r>D~GyY*$R-`=)5e1Ku! zu`=XJt~KMA=}&V;dA0sBeC&?K^k3lMUDlhgWw}31Ve)I3>~@h{X%Rpt<7(rvzVvEE zEI;s5VR?Nco8Q+@nhO%XMCTj79pIW{aPVc86vQyYq_sGyB2T9s0fmV=tWhBNGkG0j zhX)VW))}hHvz_WSY+qhAej#1cIB7E56gSmUHR($4S?Cwun4hl_O!)_};0z)YP%UQl zN1BLIT5_UzG2cC${i@?LH!uGKr2j7`8(QOBA=I%lhc#3}EEMnvumP_jXl^iAzBUMz zoof!RHna%s+^xs;9_jXObtZ!uI}hr?wGJm=f{snp0F(I2hpPs^8*C46uy^_%Nn6A6 z0AY{XsOxB(HZ8ZTuEC1dOL|%emjJz^QNx(rtit#u3^6prA9QD@O4IIr{b?;+BfR`# zdUkI-4EJ(pv`D}2Y&`cskVwJzxb~~_LS{iyteoJEt}Nmch37b=WesFk)N9O1qK~2r z=Lbcwwy?#>#-$2v3;#arPA0}dIUBUk`6l?9{Ta`HuXFUp-ihSEAQ~&UI{fMjRuF?g z5W?alTG5@}XvJ$P%&xUQEB^C|6O;QfPxjI~M@b~0%NKZh)JS4bNp&hd?Ht4UoaSfi zkCO!V-9Gr$ZCCT&&0t4_Ov+I1CTeih8~4Dj7s4Z@Nyplmq9Rw-D_T3bVGxwqx*agU zYer>yH9Ak#=7~4Ud>?vk^aGLZpJzpeXwoFwaRU50K*)mtcKYzD=4ojt8p>2C)s>q| zU8bUd?R#aEPhGsA$1-Bb@-DKxQMUT=;{0<{-!TRz9wyFd z|Cf9~Ti5$TTewqULnz*a0;mwA)i7MiK%b;`qA_!d_%g4EMvvMJHqOaLpuzhRH%frx zTyf+lV$89r!3nLJ%Nr#HbOiP5NR9H9ZL z!;IgVFH1cpYo^xkJ097!XWb>s2G%{vm~`%KOqs$awDwa}Sh746be!Deh5HvtJMB$~ zAtstTZ_y3G0JKN!t7N(SD)j6a)wC=25~JC^xat;B7#}w+ob1Xa{RO1P;Y1XwV+b!2 zMpirxF{nnvyteNazb(l#*X;m_9r|te&yP}XfTxH42J@-M?Dl>2?*?^+pnL5|sCbAn zA!F!aAhBmdV_ULHMg*?t53i!)3nH5EL5bnhM#cx0qCh8VLgECFb?&%wS!Cl z5B3}2Xz*R0{=F7NdcxIzq4i}aVED60qn)`d?TcB~lY9`QWfL{0z9p07T&5}i2CQR~ zXV~9s`5(&gOUWgSa#%fzEG)RZcl9rwAFk5Hq#;@CA_R4rXFmBsA|w$IWWVpMw_gEW zbbAvdJxv$t!t?b#jxOk;sgpE5w%>?nh`g_}c8Q!f6^7p{} z;V$upr8-W$HcYdY-op((?cnw}>PsZx7Tj&Fiu&nvWrQF06gj}wxKsDv;k+ps_sE$w z(h>yT>$W+^T9KP1r;;>y$F)7{d{E<|O1y2$9DxoHozOXNR4jJB3(qmU*(Yh<`)Ow! zVRdh_{aY+_X60rlQN;T4ZC^JGL-&j@*shw6UGz=^eK3Ri0DaGWH6bxuMVjJLCQuSl zZ{v@;H^rZjZ|n1u!f|UP#zO?bq{Od_hdu&F3J{~&&trk+ZC&pE_eIKL&Q#$E->A6x z#FFUO(~ftGvMy=GB04Oez91KX%ie3FRBwY6t$C13T;x0{{s29Kvb znBOIrU>L}S)!daq2}@Rv*XGbtFt#1|h~Y_J;o3JK#jtN2H*OYOAj)RGU)s&~3=aa> z-R4=^yIU^HtQI6vojo@$f5|67*({ThF}~+VBt*xBsYKxLXsCZr(2fDRQi=wgdI9AD zd_H0E>)x&TeLH(*W6R>l5Sz@FiQO(j;L!-&a(Y7b`%;K{#dzr3!Bs=!OzhkX>-TNX zK(`{!R_*4oNuWfvi&b|N?{ihwx}*v$m$qtllfw`~gU5;@DG4HQuI7(gVYQ^k7J;It zC5KcO>bDNLacQ(5ZrE%*FSnG7fUZ?(4Pi~ip@^_wSsq2X`L*9nV-|D(Oj>v1!p*mn!RZ+uy@{LUi1sir zFq`7Q6Y*x^Ygp0qqznFKDx?@}u7riVodmaoZgjG30GYDUv`=q!(GkGCDf$a zUsPDWSQ#M2*mepFruL*6*s^(yUv%l>`Y3^}QBZwA%UaiXwM?-Zy%xJ`2nHf+Xt-8V z!ijfd8_8atjmy!X;%a%biZwo(5+mebMF=#7kQJ8lNo$k z(^Bqp2-W|hupu@Qx?nLqoz@B3=;#OXJ21C(o zPWHE_AzJKNYb8xcjXc)Qc@I<3U+J9e&o0JGyVD^O)x)2K-e-P1gnU+t8y|9p-N8ry zovw3u4yU575kM)`-UIBzpq=*ndj8rN1xywgq^MEq@0BZhn*IJ<Rm~pRcM90AeFyFoV8)oIn1NpYA7yRR=+pEYg6ub&vKr-7-cgWYXBjg_RC*CMK zv(?v5g1PiTf1DX0xHL^U6wxy$nLjrTK(1f2e*Kfn&6KIR_ThXV*{spy06a3B2<(svCxrO|KMZt1vgCgn)c_8jwU8@^=bng-%#Ia(R~Cx%Rz2f$}wM@X82aNrR*EhzonxYxVJCQx!Ymws^U) zm2_>mfKTrFx~}@hzcTI_OVPehwG(g!o}4-Y<-O~}5icHYOE$CU4@CwRl2Fm_ki_8DNy zfp++gl_RamljwtAPwkF8(4(;-M=N}__vA9V_Ew+3F8)nt@3W?3D##ZvDdHv?J~Xy0 zn|c<(iu(vpGc%KHx+;z7kjJ@%K7U&1!yk+2DvEnzW_6gU1_`sv0Zes9-Bt_8sC_d5 z_@D`EYfp{V3{ZNULxLNtucK{p(fl_8*tprcLk3^b6!}JRcDFS#Kph(xQ>8svH6MXu zwC|U}Q7>xfbTgFq9KwNh`ew}iSbg;zj37`33ErT}%qbj$J~j;IThQt@|FZ(?3zND= zHUvJBh^8U)pW!;IZ>Vj#j(6|UI@{qR?6kPDYk-X(cH2ZFRf>puAL-^|TFtKq%bn4> zsfW*j;leH~oZtj!hi zSiwxT+1HLJhfJvtz2b(u=Je!0dwRYArnw}q$V3SL>7g7H!5GPU8JBqlM(-xcb5r=o zX4XmOfznzaAG76NY=znTwa6cl*NH?CRuGs@B z-f!&Ax-*M!(7LeJO=RPfqxJ(SDO71RjtTy`fABxU?G9&4Z$v`=QAI&EUij4v9fjL zy~~tt%@DD%dbu)&s64<#}>+J1*mJBppM64#88W>Rq|;8pu`Uqc*b|#gAtg zY4Y*fY}sUH73P))Q0x9Io9)%E;84jJ@)@mMP6d50Duj^kzuk1>+3z#|1F}B@yLRUJ z_3?s$(sYX1`lM(l3vn#}$O$?x)Ub=&b{D;+)dK14E`7 zBh{~tSwYo5z^D&Ke-rWrZ5XR_UTEk#EnB_|q1=%e)8&Y&*G9FU?eiO8t-i4$hlVgf zs})cl?|LBnJHo-KuCunKNOxX@h9$YzxIM@ThtW;Mj^Gvb-;5JQ08pyxB>zd*2B_;n z;y#;JG(zd+?n2sgzn_^H6sCQR;{FgJ(xe2H1|QvEU+na|3OQ;liqPNy6Gu>JNC+B4 zRYuk3L2YT8rNxCT?4j^Ddar|SnEv<g^!v4gBM0Gtf8xcf;Ry7Si@{aQxN;UmsUj|ae25aoEZ|@ht1GO^Si#+SBO*y2&Dz8B~>+D?Z;0p zbN+DmZ$9}D{uv_8I7%H^r;y;Rbg9^p=KS zopdSf5|bC)9ep1}oJUyxek#5jaO5D)%el#0by`V(@~Rc>{`Ljg0q&8od<>^anS~{_ z`Mhl7d?)kz%=yOe*4pzAHUc2s&;56?Ye%ps(?OfZ#qz*IQ{XB+{l{B9Xp!Pd$0H9e z*lnmuD5c2MZMSgek3!IX%9BZlulBYN5W>u=^X-qDMnNER@cj3K-Rchuzrh1nuGGi# zSLDDN&ED82P2n7~MgJMR>k|AR19>sw5GTUtBo+iH-0K@Wx|Y4gEK<`d%!;_hGdzT1zzs7r@;EU+mg8@)0ajUm<@%DjTmbr0J=v~IW0r6#XL@-( zCl7GyTrMVT4~IL*LZrZ~`o1PxjC77)sGZFP#A!8zymvX%N%_@jLcoL0;(^;sZIs+Ft?$J;QlSfj4 zlDYd{3I#`0>KSUCv|T=ryVB3zQ@wkb#K0mkK~PA5&v^^u%~St_=FbcO5g;CP6Zi>i;NsZq^3hga*GOJ0xIW-5{nxJG zW-qnMDd7ri$Ykuah|f%uED z3;x6fyY@B~?T+o7Nb{=R2jm9{e;C+BK9j$E3#n1F)^zzOXJ`Y=W2_V`(JmZLrUv~7I}S6ZC>C& z7Pe4WPA_*ZZ~TBW0!WjPw-7M$)w8Ri_%a9ZIv?!MPeJMT*90QD_dp z{d?yzpMcF6Ea6peJ=HMVY;;u}!h&PG=ieYw4+BX|PPK*g(Z&zsZ{`3MBE0#a#fwGJ z(l+e6(&Is}B@u&haR-ORR9iS^M7*J5MQkHFE**F9@Jp+~=P5no;P6}}U!va4ESU1# z`)c%|U1UWz&PsE!-=f}3Io5V=O?YUAYNLkA*(L|eW{}^{viAyzbya)pO#xo}^Wmqf z@ilS^5l?uA+xu0J_n|eSGr*)X*Hp6yCQY>96O8CO^aFM{HnW>@nyL9@M#y} z_DuuOj+m5LA*d`fV?qOH@f3Q>I4La7r!*H@xZqqsfId?{A`mZV&6!AEXTS5(e*o63 zROvltW})7ol@UfP1&GN%>Kgl%Arm1e5Q>c~9CTyN zl+^yLh{rKr-1`L~P_7>^+J?bp|6mD{Yl^s6wxhoB3JOrbu>lAvRn*IZWayRt}|TXlUI97d&|#z!kulG}aO+#Sk*Gyq!(~d2(AO%>qf>Hn{LXO%D^L zi&U46Bi36&mxZ&@@{j9fI3M)%W8lOFf^~s+@xTqLy-AkaZI&8bn)Cs+(X-!wGg$uy zqZceCvjUm(f^%-2`Q|vq<}(EW=&n|$2;bN%fYXB_lTnM0^d{#XI8^4;vq_!M?<<9P zKYX(3YS2{t1ojlaya|Y+6GNiE37p=HmTFSzu-F0GGimC_{*wc% zC@D4QaTpL>e2vl@H$X@MpP6X;5jc3B$r(^VAZ!*YEq+z2+I*lUXpFtgdEdIorQlvW zc%lJXN}!>FkP?gPdHBJK z95oOLg0;Gr`;IbP06(DlSp&Pa!@UD{r>qCIkM<7@cLoq@4a6_s;x2`ZdI+U zW00;uy#LcdB}9PMQKC>NWK8g@G5X3I_~9%OCKT@RyEB2qss5Vw1~`3hG0f@%%2r;& z;{q0?H$<8~sW-#%tmqxt=O5+n4lH5g`{ywn(tMXo=?wK8x!?Znx?=OSQ}0^1Ae@ik z=&KUIgQzB_a%bIu35GstsToB`B5dkZHK?0(&d&4Y@XSSD1~QntDzO&PcPy+RSGo>N^b;~B#}*)ZY*mgAaDaE}Y=bW)j5tt&@vjub ze}$JBsTu@}Rj8Xl0z{h9&0g!uF)LrbBfktCkk_?K#9g3al{Bz(0VMN%<|(N{B4@_p z9u6q!un501A_`e&)uZ}?pOxkrfJ6@cs-z~M@cp{XHt=JuvB}@)D|EG=K6{ranl$-g z%O=Zoc_54rCd4K%y6s1#(NDOb908CRa1~tx-l+g0HYSE1FlVd5jE#~ef%;u%o(M?e znAG=MaU`GYhl*daejk^X8T?#s-S1v zu$mwU-Nce{RQStBhA1B;Ok5BGBV+h0Ci&)*O>)vm$$0HYpJWC*9-h}T|4^G;>$NP! zMmI*n$p#7Je*kdNo7gAt8O}VV_Px)V_D|)fG=)g09AX%JGS<-hN{vQ3h5rD?mW;<> zh;t}}?2ii?AG}NX-nhVd2JY56rO4CBd%VL`{O9bZ4|f7`P0pXUy+5SIkR6Py!oCU` zj)_eg{hYHEi5^%#U-|s(=ePJK;g%DoDpj8OM;rn8vV<+4rX%>NJ zzWq6@0jnsN%7xg(?^~y>4X_v4sb@rzKxqWahPtsLX_~~(@L@&Lr_MRmwKVOGCySti zpyj+;y1nbMr=fr5cs58eR63vhPhqNnnug=0y_-#KPwl7dMzo};-^<6(e}hyIfo5T| zn)L^_28uVAI^>U1LS=LL=D}_nTgB znbe+)-o^vGCwPaY=103ZF^*C+Df8uPU+t9r17%2^Wzm3l>G=5#P>`D%W@Pj0mANVC>1(sz< zkN`Bq#nuJfsl4ujR_^JNj-3n0W;x3}y^`RunFe11?ZOfU4sv2DEk0*gTgWSYg}yU{ z@-cJgRmhQ|#1e4ZSg-p}ND?6xupkYzO-j23PlL!z269NzOJF}x zQJ;HsR%7PYd<9uWd9kS^1(-$o+Quhy z#je>d$T(wd|ESNU0Y14_Iv}6ZH_PePjYrM@u&kJ71LrxvzlPKFRp)*4SL^of@SVrO z?##wdNj@62?eNJw0oGn?nRdt0eCc<-zjFSRlGXbQ1Bw1ME?(Ez?DT(kgqc3nb8^Hs zFXgTT3AKRK4zN&S!4#Mc6r1qeuYOr+{$+-k0nlHx0sm;W2YtW|Xs5MkupnZXdsqaQ zdR2r@g7{(5sgqf?m&I}M=Ym?RDD{*-xn^2mZTX*}LR5k4ZLoIcfEN`g$O1o>R=-4o zhGlCf%FYyY!Tr1xL#dH`xQlWip+`@>AsglQUGu|@sQzKY^Q}&#(U`cMG)~1Lrux9* z`Xxy3nS)fRRtQD ziYDLx?iK^-qGv!&_*afa?}yH5Zf-jtbeME34qiFy_elr@g+g42U(xf!9y%;EjI6tV z8K`U^NHEKoTvS#!xxv%`NWA|ogD$pb3(xy#^A@Q^7o~@n0;-4r@hueJtKeVzWm~lY z>mXzf?jAHP5IR!IE#NT)Bfth1gw=tMONvwVj8$DwU@-a~_2=4rNu_eaX-evA4s(cp&nxz82x%8slHy4n#(1 zF>iWp`I21!agV(7hWo#;@W0G#{}mqp`&akY{}_CJF&a}0&;SFE0x8SK=FPZ=av)RO zvYcPn-zgit^^U=*xe@UlzyDkn@(*HGBLL`W_rg<-6y;iB!04uB2RsPpi19%Ka&3J$ zO(M!M&f%QYtFuNY3BR3Zpbh~n9a{o~z(3n9LtH6hcQw`hM-SI^1&oO*qYrtq)j$rh z&E$?3PDrHisMcmHOS%9-l?VGKn$Hrgwp`)jt|UrVT8}o1pv)rePI2NhDx1gb|QoXVCRI zzy|_!=3n6>3GM%2e^DEg%gRxXtA@1bB+uDG;H5DTR_8=@;4^drk&x$*P+yGCCTPI2 z-=6yNACdJj89Bw%J>#G!I#!*^sv!e>F|$>h?JYK~yg{B-9mkA`s>2|*m2rAoE0J>U>7hO9ofw0!I+-|RB zPIWfemsW3NTK$6UVc&05bzWRR#8^*OPsMSifh5QItoT=qFJU$@99TAXD9vJ~fw|{C zPjYw9N~<7*?+~m$2eS?N!f%{48jBc*duB(B;&;6>fg@roRGufrV<%4tDe6SM_E;Ub42X25L<+)SZ_ntk!`e7#wojPi+?V%me|P+; zH5i(Iu{ydK{nV^-xgei><@f;j^OY;G%>>9E5>2d!-eeVaq@Jtn6he7ZAQd)699u5K z*47I90IM8uzXcRWyqT9%Gju@q`|Eh0S1r zTx(HPcm6G9P=VxRW1mMgj&anEmG0Do^-`5_=`mSQfu!4D1pq3Eu=BPuaJNKMAi?`} z;35Eiu)Iwd|5Yt}SJkT*+8tK+_T|pV!kXBknjOQcbJS^c=q%xTrNy;9iTmreUF&i* zUR>MLHDEclTpZ7%^BLszDg3QdhXOl~B2Cy=`{TXdsfX_V{-;Lg@&Fe@b&(lY?CTdh zQV-Tg?3G?=AJ}8 zA6-{W*jMYnvnuOIgF%C0`0)apv9{Dg-96-yAWPdpF&%LhO z*ln~fcY4=$43{=F*zeNFi-*OIUF{esk@e3QPJAAz?^zxnup%MgU%&M_M;p#8ix0Tc z<{AQiSEpGP&sFB7O%^f#e)T?{R#|>RmLywio* zohyFxQinuk1b_{vTMlGLwQos%`**=Xeh+f4YNIv#$Hr&l0u*^^-(*LHk4*2W4A$%) z8viykSdo{uCYissL=FIYi+y?stKp^OdoLzmXwjZ%=*3U|>9^jA0)}jJ%7Un&mx-@Q z=5L=HHY3zek(cIJ==@ru-m@S=zB#o`Ybvho0f2wEXy3WgS-L{pwk4GS@X3t_;rQ%u zR=2?_>oWmBS*tFVOS|4VfCpq*k^TUnHdtSs8rc0`lm3+x`=_#Yh2HX908^m)1VohzNizmLBEpK0kq%%#U=R{PNOY`@X<;hfNx zms40&;_$5neQt#Rf};)RdU1H(FNIb$TS{S)R%zYz6q{vHK zBIbHi<5))RK)NAG$Rrvsd8NrUo630b=p?jozy}zzbxcGeh z-bxjI*XG1=>0}Q{Id39; zdQ)+JW!&i%V&{`x4Aoucv(4H?F>L9Eq?acLKJ|TrfI+TYpY)H}AzRDZeawhA`}fH5 z_<#z9p=-bb00xWwoLu`{LV!nK7!`*hacCqeiE!nGc=fB3I5ZOe-{QmjFn~Xvk}r!7 zSeeN4=Jg&Y0)apv5RZHqYPMmYJQ=!QqL%fU9M{!elZ{3qa7V5WhOj7(Rng-Oef0cF z`e&87C!61!8L~8v3jhrolgWln6wpIh6mbCkVyo6;kHIWTugNu_T$9XS9K-RW5SPYt z@wn$u=jP z#iTr#j;|%^I38{5)Ib`EkRHSo2aKpsJs?qMM*1&~;o!pD>lxIU?QuNX`V_t$piXTJ z^QTrS4fx3sZ0d_?f>Cw*-pr6B0bS%ro*%`=2bF(Q`PT1(CIrxk1lT%FR4RM0hlxQZ z&J1Ohx9I?&LZRP0IS@|;mA4OMMX>=OJC-v)imftOdyG~;3bCf!$f6Q+69Nv`^#DLw zt9GJ*;ce+W|CaLQ$--&DOgfqH!K@Ia-g35iXm*yy2TT?*M_4cc&gP0=n8@3Dp*^Ok z=AX4a_;Ggu@Z(8*#?!GJ0GJiVQX8%AcMIOsIF?cSAXUhCJwxP2A+Ai~dFg>0~Q)XaOMw{MZUwN__FX$Y!+UI*RS9kpg7~~F}d0ZlSRI)ci zb%)|q-Af@7FaWa+qml?7XT*221#Y#WtCDyJrRptHgvT2CRwnYi`GP-nl;U8=7%_mq zmUouO`WHm8t#%BT%A5CHY}MW$urSC(vkjw@2|m1jyiSKeAP^`FePq}=Rdhh2u2K%= zw-WgDXb$ygy=Kdlp}@33W2#gdzI-aeC55@`wsLoc>WvH$035B?{JJ_}Y7i3u8hcF{ z|GZnY5Odidg8>}9tH~Tggc0UXVNr>d>yn%^ARRi3xAUbc!^Ttrp0zDp81eDk&=tpJ z|G3um$=py!gJ+uieRMZFjD_#Ja`4jG)+i43*wR=4*nDo3hxic3umvW}pRz>E^|nW3 zeiZv_iTYBTE;G_UNkH$=nakUBNqjn4`9x)i=g0mh<@KVRzbp+?`M9MGVHQiz13cQv=V^gg_=sn>LKZQ|RPJ3hYA^}(!=@p?T1 zfj}T!FMp4s&{Ps(S628Jca+1IaM(UK?CtW7!*v>!!FsJzpL47!CoUi(*l*;O9zM+s z`|w(q+Gwp-8G8q<=|MxwyW#+vfI)V?@L&Kf{pNM0Egd@ZYZ;yezDzP zv0LpJzBY$Hx(82}0zgZ@sjO9JvS9@ks^&gZZX&OD(Du=FMZd|$p^-xUsTTW#;>Pu< z0%^Cgu&Uc^!z3!>Ik^^Z5N~Zms^C(a?nu4HhJn^(t56sKK&iJ-NCc}LyVj{cFW34O zIG9Cg>^14k_CYJ=?VQ&#L?7Q!+))_toRiBAk|`o)-=OtWQ$HT2KN;?ye@p3Dn^x*A zL;}HL$BJuv9Jx#Y*qA2x@AA%Q4lUH5;-lZam8v@mgUN>d?Uzmgle{R#>yq~Ysd~=g zd)GVlT9fTom;O{!-^?(U4*|Ssqe^M8V_>pjzSZb^)GlpSC=3=mX2V7|X=edErx=NZ zy!61l3+?v@EEvG;E`xi1*CT6F_&hr4*<(!-m9fucJ6xxE`p2g6dYnf?9aUx*+-Jmx z{d>cYLR=ife(Q3_WD!&3NA~6mV@IjC(8vU{4Qth!4@lHLybl02r3u6Vw4GVuyYHwP zG$xN;k3b+0i2vtdC;()~a-5^g6$t_R7e#$~QxU#LntMX_2Ql~XGtut9S{Tiq7VP)_ zulJAEYZk?D2qPPG?3aK2Vh1z7a(eMy48v}$NgQ?O1Rmp_SUN$ew?-A#L>JW@l&URu zERac=9_;6My10-@IUrF76-W+B)u&g81DRwJ0n`Rd{8zQ1UrIHD*1tRvd(E3Jj^TWk8Mdxe&ilMN=a@`3G7KdWU|uBqPM1C{kO=@;QS5)W zXy*;@)Y+94zW#Je#9nDjzd1AFL6o*8nSZHG_gtbc@fOE$@-xF$pK1;&kVsX=lI3EG z_cFWH6Zwl`IBQDefd!IPKg<7PlJKQTLLUNnegwZE$3T3dOfw?}e42%H@qfyjHj{?2m}IwKs<)b|8p6jmw7%+P@=?+!C$X*=EQMP42nP? z5C{YUg`tRtM7?^Dv#UzpZ^n0)AP@)y0)cqUK}o5H#OjH>)f0J-vj&m`blq!{ktHAy z2m}Iwz(Lti1OkCTAP@)y3PTYH1OkCTAP|oSLp$XW2m}IwKp+r^hY8AtA`l1!0)apv zP#B6pAP@)y0)couAb%@10YK1;*+>@%1OkCTAP|U$#{U8f14Zt^rCbOA0000` followed +by a keyword, like so: + +``` +@Mention Apple +``` + +## Setup + +Before you can proceed further, you'll need to go to the +[Mention Dev](https://dev.mention.com/login), and get a +Mention API Access Token. + +1. Login. +2. Enter the **App Name**, **Description**, **Website**, and **Redirect uris**. In this version, there +is no actual use of the Redirect Uri and Website. +3. After accepting the agreement, click on **Create New App**. +4. And you're done! You should now have an Access Token. +5. Open up `zulip_bots/bots/mention/mention.conf` in an editor and + change the value of the `` attribute to the Access Token + you generated above. + +## Usage +`@Mention ` - This command will fetch the most recent 20 +mentions of the keyword on the web (Limitations of a free account). +Example: +![](assets/mentions_demo.png) diff --git a/zulip_bots/zulip_bots/bots/mention/fixtures/create_alert.json b/zulip_bots/zulip_bots/bots/mention/fixtures/create_alert.json new file mode 100644 index 0000000..af4d6c9 --- /dev/null +++ b/zulip_bots/zulip_bots/bots/mention/fixtures/create_alert.json @@ -0,0 +1,125 @@ +{ + "alert": { + "id": "112233", + "name": "NASA and competitors", + "query": { + "type": "basic", + "included_keywords": [ + "NASA", + "Arianespace", + "SpaceX", + "Pockocmoc" + ], + "required_keywords": [ + "mars" + ], + "excluded_keywords": [ + "nose", + "fil d'ariane" + ] + }, + "languages": [ + "en", + "fr", + "ru" + ], + "countries": [], + "sources": [ + "twitter", + "news", + "web", + "blogs", + "videos", + "forums", + "images" + ], + "blocked_sites": [ + "www.spaceoflovemagazine.com/" + ], + "role": "admin", + "stats": { + "mention_sources": { + "total": "0" + }, + "mention_folders": { + "inbox": { + "total": "0" + }, + "archive": { + "total": "0" + }, + "spam": { + "total": "0" + }, + "trash": { + "total": "0" + } + }, + "unread_mentions": { + "total": "0" + }, + "unseen_mentions": { + "total": "0" + }, + "favorite_mentions": { + "total": "0" + }, + "important_mentions": { + "total": "0" + }, + "tasks": { + "total": "0" + }, + "todo_tasks": { + "total": "0" + }, + "done_tasks": { + "total": "0" + }, + "logs": { + "total": "0" + } + }, + "shares": [ + { + "id": "THE_ACCOUNT_ID", + "account": { + "id": "THE_ACCOUNT_ID", + "name": "Doe", + "email": "john.doe@nasa.com", + "language_code": "en", + "created_at": "2014-09-30T10:03:54.0+00:00", + "updated_at": "2016-01-14T14:55:57.0+00:00", + "avatar_url": "https:\/\/d39qsljf883l.cloudfront.net\/f6415b89ef2ljkca5c0c7d464f1b82-088f3dsqlj12lj4.jpg", + "timezone": "Europe\/Berlin", + "grouped_email_notification": true, + "default_email_notification_frequency": "daily", + "default_desktop_notification_frequency": "hourly", + "default_push_notification_frequency": "hourly" + }, + "role": "admin", + "permissions": { + "edit": true, + "delete": true + }, + "created_at": "2016-01-14T15:31:42.0+00:00", + "weight": 88674800 + } + ], + "noise_detection": true, + "created_at": "2016-01-14T15:31:42.0+00:00", + "updated_at": "2016-01-14T15:31:44.0+00:00", + "quota_used": 0, + "index_version": 2, + "permissions": { + "edit": true, + "share": true, + "list_tasks": true, + "list_logs": true + }, + "description": "Monitor NASA press release.", + "color": "#05e363", + "connection_type": "related", + "connection_id": "12121212" + } +} diff --git a/zulip_bots/zulip_bots/bots/mention/fixtures/get_mentions.json b/zulip_bots/zulip_bots/bots/mention/fixtures/get_mentions.json new file mode 100644 index 0000000..3ecf33c --- /dev/null +++ b/zulip_bots/zulip_bots/bots/mention/fixtures/get_mentions.json @@ -0,0 +1,15 @@ +{ + "mentions": [ + {...mention...}, + {...mention...}, + {...mention...} + ], + "_links": { + "more": { + "href": "...url to get older mentions..." + }, + "pull": { + "href": "...url to get newer mentions..." + } + } +} diff --git a/zulip_bots/zulip_bots/bots/mention/fixtures/mention.json b/zulip_bots/zulip_bots/bots/mention/fixtures/mention.json new file mode 100644 index 0000000..47302cb --- /dev/null +++ b/zulip_bots/zulip_bots/bots/mention/fixtures/mention.json @@ -0,0 +1,73 @@ +{ + "id": "527849933", + "alert_id": 112233, + "title": "NASA image shows 'starburst spider' pattern on Mars", + "description": "USA TODAY NASA image shows 'starburst spider' pattern on Mars USA TODAY NASA's Mars Reconnaissance Orbiter captured a stunning image of a \"starburst\" pattern on Mars ' surface. The \u201cstarbursts\u201d can be seen each spring when Mars ' seasonal cap of carbon \u2026", + "original_url": "http:\/\/www.usatoday.com\/story\/tech\/nation-now\/2016\/01\/14\/nasa-image-shows-starburst-spider-pattern-mars\/78781074\/", + "clickable_url": "https:\/\/web.mention.com\/api\/url?token=eyJ0eXAiOiJKV1QiLChbGciOiJIUzI1NiJ9.eyJ1cmwiOJodHRwOlwvXC93d3cudXNhdG9kYkuY29tXC9zdG9eVwvdGVjaFwvbmF0a9uLW5vd1wvMjAxNlwvMDFcLzE0XC9uYXNLWltYWdlLXNob3dzLXN0YJidXJzdC1zcGlZXItcGF0dGVyb1tYXJzXC83ODc4MTA3NFwvIiwiYWNjb3VudF9pZI6NDM4NDA0LCJhbGVydF9pZI6MTE2NTk5NSwic291cmNlXlkIjo0LCJtZW50a9uX2lkIjoiNzU2NzM5MjMzMIifQ.XH7WJlYkOYTDFysZELmouro__7QVoe5pT9c1qeZw", + "displayable_url": "usatoday.com\/story\/tech\/nation-now\/2016\/01\/14\/nasa-image-shows-starburst-spider-pattern-mars\/78781074\/", + "unique_id": "http:\/\/www.usatoday.com\/story\/tech\/nation-now\/2016\/01\/14\/nasa-image-shows-starburst-spider-pattern-mars\/78781074\/", + "published_at": "2016-01-14T17:16:27.10090700+00:00", + "created_at": "2016-01-18T16:05:44.0+00:00", + "country": "US", + "updated_at": "2016-01-18T16:05:45.0+00:00", + "favorite": false, + "folder": "inbox", + "folder_set_by_user": false, + "read": false, + "tone": 0, + "source_type": "news", + "source_name": "USA TODAY", + "source_url": "http:\/\/www.usatoday.com\/", + "language_code": "en", + "tasks": [], + "logs": [], + "children": { + "children": [ + {...mention...}, + {...mention...}, + {...mention...} + ], + "total": 42, + "_links": { + "more": { + "href": "/api/accounts/THE_ACCOUNT_ID/alerts/112233/mentions/527849937/children?limit=20&before_date=2014-03-20T18:10:37.53829200+00:00", + "params": { + "limit": 20, + "before_date": "2014-03-20T18:10:37.53829200+00:00" + } + } + } + }, + "picture_url": "\/\/t3.gstatic.com\/images?q=tbn:ANd9GcQlW3QxiNh2YxxacyF0gR636ViYH6YS_0ONIRj9pf4OhiRZ8hHHyCQqdOYVgMuToZ1Iixhy", + "tags": [], + "offsets": { + "title": [0, 0, 4, 4, 47, 47, 4, 4], + "description": [10,10, 4, 4, 57, 57, 4, 4, 72, 72, 4, 4, 79, 79, 4, 4, 161, 161, 4, 4, 223, 223, 4, 4], + "url": [], + "source_name": [], + "source_url": [] + }, + "permissions": { + "favorite": true, + "change_folder": true, + "create_task": true + }, + "author_influence": { + "id": "3153793048", + "alert_id": 112233, + "kind": "web", + "url": "http:\/\/www.usatoday.com", + "name": "usatoday.com", + "score": 83, + "scored_id": "usatoday.com" + }, + "metadata": { + "twitter": { + "id_str": "800747234652340224", + "user": { + "id_str": "188302352" + } + } + } +} diff --git a/zulip_bots/zulip_bots/bots/mention/mention.conf b/zulip_bots/zulip_bots/bots/mention/mention.conf new file mode 100644 index 0000000..e6af086 --- /dev/null +++ b/zulip_bots/zulip_bots/bots/mention/mention.conf @@ -0,0 +1,3 @@ +[mention] +access_token = +# create an app here and get the access token from it: https://dev.mention.com/login diff --git a/zulip_bots/zulip_bots/bots/mention/mention.py b/zulip_bots/zulip_bots/bots/mention/mention.py new file mode 100644 index 0000000..961fa27 --- /dev/null +++ b/zulip_bots/zulip_bots/bots/mention/mention.py @@ -0,0 +1,103 @@ +# See readme.md for instructions on running this code. + +import requests +from typing import Any, List + +class MentionHandler(object): + def initialize(self, bot_handler: Any) -> None: + self.config_info = bot_handler.get_config_info('mention') + self.access_token = self.config_info['access_token'] + self.account_id = '' + + def usage(self) -> str: + return ''' + This is a Mention API Bot which will find mentions + of the given keyword throughout the web. + Version 1.00 + ''' + + def handle_message(self, message: Any, bot_handler: Any) -> None: + message['content'] = message['content'].strip() + + if message['content'].lower() == 'help': + bot_handler.send_reply(message, self.usage()) + return + + if message['content'] == '': + bot_handler.send_reply(message, 'Empty Mention Query') + return + + keyword = message['content'] + content = self.generate_response(keyword) + bot_handler.send_reply(message, content) + + def get_account_id(self) -> str: + get_ac_id_header = { + 'Authorization': 'Bearer ' + self.access_token, + 'Accept-Version': '1.15', + } + response = requests.get( + 'https://api.mention.net/api/accounts/me', headers=get_ac_id_header) + data_json = response.json() + account_id = data_json['account']['id'] + return account_id + + def get_alert_id(self, keyword: str) -> str: + create_alert_header = { + 'Authorization': 'Bearer ' + self.access_token, + 'Content-Type': 'application/json', + 'Accept-Version': '1.15', + } + + create_alert_data = { + 'name': keyword, + 'query': { + 'type': 'basic', + 'included_keywords': [keyword] + }, + 'languages': ['en'], + 'sources': ['web'] + } # type: Any + + response = requests.post('https://api.mention.net/api/accounts/' + self.account_id + + '/alerts', data=create_alert_data, headers=create_alert_header) + data_json = response.json() + alert_id = data_json['alert']['id'] + return alert_id + + def get_mentions(self, alert_id: str) -> List[Any]: + get_mentions_header = { + 'Authorization': 'Bearer ' + self.access_token, + 'Accept-Version': '1.15', + } + response = requests.get('https://api.mention.net/api/accounts/' + self.account_id + + '/alerts/' + alert_id + '/mentions', headers=get_mentions_header) + data_json = response.json() + mentions = data_json['mentions'] + return mentions + + def generate_response(self, keyword: str) -> str: + if self.account_id == '': + self.account_id = self.get_account_id() + + try: + alert_id = self.get_alert_id(keyword) + except (TypeError, KeyError): + # Usually triggered by invalid token or json parse error when account quote is finished. + raise MentionNoResponseException() + + try: + mentions = self.get_mentions(alert_id) + except (TypeError, KeyError): + # Usually triggered by no response or json parse error when account quota is finished. + raise MentionNoResponseException() + + reply = 'The most recent mentions of `' + keyword + '` on the web are: \n' + for mention in mentions: + reply += "[{title}]({id})\n".format(title=mention['title'], id=mention['original_url']) + return reply + +handler_class = MentionHandler + +class MentionNoResponseException(Exception): + pass diff --git a/zulip_bots/zulip_bots/bots/mention/test_mention.py b/zulip_bots/zulip_bots/bots/mention/test_mention.py new file mode 100644 index 0000000..cbfbf9e --- /dev/null +++ b/zulip_bots/zulip_bots/bots/mention/test_mention.py @@ -0,0 +1,34 @@ +from zulip_bots.test_lib import BotTestCase + +class TestMentionBot(BotTestCase): + bot_name = "mention" + + def test_bot_responds_to_empty_message(self) -> None: + # Offline query. + with self.mock_config_info({'access_token': '12345'}): + self.verify_reply('', 'Empty Mention Query') + + def test_help_query(self) -> None: + # Offline query. + with self.mock_config_info({'access_token': '12345'}): + self.verify_reply('help', ''' + This is a Mention API Bot which will find mentions + of the given keyword throughout the web. + Version 1.00 + ''') + + # Offline query. + with self.mock_config_info({'access_token': '12345'}): + self.verify_reply('hElp', ''' + This is a Mention API Bot which will find mentions + of the given keyword throughout the web. + Version 1.00 + ''') + + # Offline query. + with self.mock_config_info({'access_token': '12345'}): + self.verify_reply('HELP', ''' + This is a Mention API Bot which will find mentions + of the given keyword throughout the web. + Version 1.00 + ''')