essential-actions

Clone or download

Merge pull request #25 from j4ckofalltrades/twitch-chat-update-action-api

Twitch chat plugin use latest action-api

Modified Files

PK
PK
#mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
#mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
#mR META-INF/PK
#mR META-INF/PK
#mRaddstreammarker/PK
#mRaddstreammarker/PK
#mRMETA-INF/maven/PK
#mRMETA-INF/maven/PK
#mRMETA-INF/maven/com.stream-pi/PK
#mRMETA-INF/maven/com.stream-pi/PK
#mR6META-INF/maven/com.stream-pi/twitch-add-stream-marker/PK
#mR6META-INF/maven/com.stream-pi/twitch-add-stream-marker/PK
#mRyTmodule-info.classmNN0ДGyzAi^8 KW1iWC.|pJ)b-=|{p^cB86e!՝NLՕΟ yCh| ' #]pp<k
#mRyTmodule-info.classmNN0ДGyzAi^8 KW1iWC.|pJ)b-=|{p^cB86e!՝NLՕΟ yCh| ' #]pp<k
R/lD6kn)IRk(fjZU( LwXZzb훈& Sas%:#2)1EyQnL=x2}4L#@X׎;bϽ7h8l: \>Z)¡G_PKyTPK
R/lD6kn)IRk(fjZU( LwXZzb훈& Sas%:#2)1EyQnL=x2}4L#@X׎;bϽ7h8l: \>Z)¡G_PKyTPK
#mRn;r}+addstreammarker/AddStreamMarkerAction.classW{=[X6@ `j 
#mRn;r}+addstreammarker/AddStreamMarkerAction.classW{=[X6@ `j 
H܌dCZW, p[%״i/toIL㒴!?=v_|3zջs}[o8$YL+؀QRg|ZԺ(fD]a$фˢ3`^Ԧ+2`a1 G%WES$z!KI<ψx^_gDy I|/&q/)/W
H܌dCZW, p[%״i/toIL㒴!?=v_|3zջs}[o8$YL+؀QRg|ZԺ(fD]a$фˢ3`^Ԧ+2`a1 G%WES$z!KI<ψx^_gDy I|/&q/)/W
^5_W L%^|[w|W$4u61}xXsI MY|tlPhx,cZuu]=Wp3sB&d&EI LOKwuOIHd"lə1V^5I}2{[Sk~EMO^,zk苋`b1GPAfluJUhJ8,͔̌kRYkT-xcy s7
^5_W L%^|[w|W$4u61}xXsI MY|tlPhx,cZuu]=Wp3sB&d&EI LOKwuOIHd"lə1V^5I}2{[Sk~EMO^,zk苋`b1GPAfluJUhJ8,͔̌kRYkT-xcy s7
Fئ 9ǎY,,E 1ㆄ
Fئ 9ǎY,,E 1ㆄ
(o'~v](A!7k'H ?Cv_ߤSJ,8y_/,02~@/g[))&fqFBK(ޢG0H"U'S$TCHDLR?ƫse\-wuT1sd}\3\2SQ-s_Nd|y]CF*Job3mߘsu?s{I{fPKJP5S 8%2Yo:*~+;gkeoJQUeA'_eMqKxC®Z {lZE1oo EqeQq
(o'~v](A!7k'H ?Cv_ߤSJ,8y_/,02~@/g[))&fqFBK(ޢG0H"U'S$TCHDLR?ƫse\-wuT1sd}\3\2SQ-s_Nd|y]CF*Job3mߘsu?s{I{fPKJP5S 8%2Yo:*~+;gkeoJQUeA'_eMqKxC®Z {lZE1oo EqeQq
oaE?|DLS-`|
oaE?|DLS-`|
X]AIj_c΍י(fž:^7ыb)[Ŕ yٛ*Y)]Jsi Ro;*ZY"؆::YO‘2.&^f,%Gop3G{`[7z37rDVg;.s)3gMFri xoBuQ(6pPٟFFF0)5+Ku cUC}/ɥ'{TQz@cW3y5/E qY/[Jܖ)a%LH!#Lץq 4T<gl~sga{eרdm>+ǭX
X]AIj_c΍י(fž:^7ыb)[Ŕ yٛ*Y)]Jsi Ro;*ZY"؆::YO‘2.&^f,%Gop3G{`[7z37rDVg;.s)3gMFri xoBuQ(6pPٟFFF0)5+Ku cUC}/ɥ'{TQz@cW3y5/E qY/[Jܖ)a%LH!#Lץq 4T<gl~sga{eרdm>+ǭX
ȃrOm[xE."j ׸5rv6M\l΂5X+MA"nVlvV"]򶭖\\$4/u7s%bkۼIyj:3Y39%W^NEH8^?MC ><خgeԳJ/CJkۈmԥrZS4i1^At"_Fs-i%@4,m [-movc'>hQ"H5,β텸b!׈3zxڴ{ۖyѶѣ PAo^mߦRO'zv²_1>ُ=x=uQ"TMD|]<V #'(析uQpU*fM<jBF߼pؓWH ;3ƙ}|/@o`M T߻ *څHK'g:ޗ}79B[O$VphZ;YG߹ELs.80H0ژZLAXb8NUy*0J}rD 1<I_m0m>$GlC=d˸2,#Ӵ!rSk.Lq`nD:MBjGcd4uZ;CLP|o&v.03oR_L
ȃrOm[xE."j ׸5rv6M\l΂5X+MA"nVlvV"]򶭖\\$4/u7s%bkۼIyj:3Y39%W^NEH8^?MC ><خgeԳJ/CJkۈmԥrZS4i1^At"_Fs-i%@4,m [-movc'>hQ"H5,β텸b!׈3zxڴ{ۖyѶѣ PAo^mߦRO'zv²_1>ُ=x=uQ"TMD|]<V #'(析uQpU*fM<jBF߼pؓWH ;3ƙ}|/@o`M T߻ *څHK'g:ޗ}79B[O$VphZ;YG߹ELs.80H0ژZLAXb8NUy*0J}rD 1<I_m0m>$GlC=d˸2,#Ӵ!rSk.Lq`nD:MBjGcd4uZ;CLP|o&v.03oR_L
|PF bR0T8O I;PKn;r}PK
|PF bR0T8O I;PKn;r}PK
mRMݔ) =META-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.xmlV]o }ϯeqUU*J1Il'M=p.\KcY,DH&*XyJY U+f3 rKK'
mRMݔ) =META-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.xmlV]o }ϯeqUU*J1Il'M=p.\KcY,DH&*XyJY U+f3 rKK'
.2x~+=b鸗GI;pe~\"N-QHTab$)[sLZqU⒧xr;OX °2k`^AeX J@CaC.CdrœȭZWDӉ4TSݓ@Z`DQ G&QSY͈reklӰaL?4LzHpƴffh4EZx>u _FlmA*.׿~9@C4MTi1i7R"1^ڌ>n:8ϋ"kZ4SUQgzt =jw'dxvtcDc6E 8##1AQ"R}MHĈ2ɆCJQ!Xzp_%pH쵇0ګy\hD0g/4˯]~~$ÚT/Pt_KRg$L bޱ<db "*ͨgەY7 C O;M-ź aνo>]'ߓ,PKMݔ) PK
.2x~+=b鸗GI;pe~\"N-QHTab$)[sLZqU⒧xr;OX °2k`^AeX J@CaC.CdrœȭZWDӉ4TSݓ@Z`DQ G&QSY͈reklӰaL?4LzHpƴffh4EZx>u _FlmA*.׿~9@C4MTi1i7R"1^ڌ>n:8ϋ"kZ4SUQgzt =jw'dxvtcDc6E 8##1AQ"R}MHĈ2ɆCJQ!Xzp_%pH쵇0ګy\hD0g/4˯]~~$ÚT/Pt_KRg$L bޱ<db "*ͨgەY7 C O;M-ź aνo>]'ߓ,PKMݔ) PK
#mR|_gDMETA-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.properties-ʱ
#mR|_gDMETA-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.properties-ʱ
ݯ=!K0床 tZr> j2%*d :@(.7bu1ﶁjPK|_gPK#mR4AW_META-INF/MANIFEST.MFPK
ݯ=!K0床 tZr> j2%*d :@(.7bu1ﶁjPK|_gPK#mR4AW_META-INF/MANIFEST.MFPK
#mR AMETA-INF/PK
#mR AMETA-INF/PK
#mRAaddstreammarker/PK
#mRAaddstreammarker/PK
#mRAMETA-INF/maven/PK
#mRAMETA-INF/maven/PK
#mRAMETA-INF/maven/com.stream-pi/PK
#mRAMETA-INF/maven/com.stream-pi/PK
#mR6AVMETA-INF/maven/com.stream-pi/twitch-add-stream-marker/PK#mRyTmodule-info.classPK#mRn;r}+addstreammarker/AddStreamMarkerAction.classPKmRMݔ) =
#mR6AVMETA-INF/maven/com.stream-pi/twitch-add-stream-marker/PK#mRyTmodule-info.classPK#mRn;r}+addstreammarker/AddStreamMarkerAction.classPKmRMݔ) =
META-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.xmlPK#mR|_gD META-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.propertiesPK
META-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.xmlPK#mR|_gD META-INF/maven/com.stream-pi/twitch-add-stream-marker/pom.propertiesPK


PK
PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR META-INF/PK
mR META-INF/PK
mRconnect/PK
mRconnect/PK
mR connect/chat/PK
mR connect/chat/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/com.stream-pi/PK
mRMETA-INF/maven/com.stream-pi/PK
mR1META-INF/maven/com.stream-pi/twitch-chat-connect/PK
mR1META-INF/maven/com.stream-pi/twitch-chat-connect/PK
mR module-info.classUP]O0=Wɇ | 1&NjdywG6@i{O9=k9hYd*qDh'yG}*%z_@._ Eys C⸋z?Y…2,d]jj*2i)+&%rIXoSLL:G c~] :{#4W^~ ކiy7.Z#,XiT"e@XyWprp>j\(b'lZPK PK
mR module-info.classUP]O0=Wɇ | 1&NjdywG6@i{O9=k9hYd*qDh'yG}*%z_@._ Eys C⸋z?Y…2,d]jj*2i)+&%rIXoSLL:G c~] :{#4W^~ ކiy7.Z#,XiT"e@XyWprp>j\(b'lZPK PK
mRVԱ%connect/TwitchChatConnectAction.classW [=#cy 8x#KdlA 44FcČ:3%ަK/ޤDviM'f$!`7w˻zWo8q0F.MG#@Ju炨Ƙ02AbsS,Z⑕zvN5\؀BAzxIYAxL-b;ڻA<q
mRVԱ%connect/TwitchChatConnectAction.classW [=#cy 8x#KdlA 44FcČ:3%ަK/ޤDviM'f$!`7w˻zWo8q0F.MG#@Ju炨Ƙ02AbsS,Z⑕zvN5\؀BAzxIYAxL-b;ڻA<q
OBC|X>QOSAx|Zgl럗 uXW"12+>rkXB6E39MaKXLLwHt J'v2ˬOft͎zJ7]C8)NOӹ Q'z4ime9׵L*]}0 pӐ굽s=ftJj!6ļX GŽ^52d:ܘґt Zq̀meu5t
OBC|X>QOSAx|Zgl럗 uXW"12+>rkXB6E39MaKXLLwHt J'v2ˬOft͎zJ7]C8)NOӹ Q'z4ime9׵L*]}0 pӐ굽s=ftJj!6ļX GŽ^52d:ܘґt Zq̀meu5t
\ooHڄ.>Ihں615'>Y_t4(}ɤ8ָnZl ']zV_$Ⱥeyd%!Jrn;IZrOzZfl;Ȫe(bSct=fMQMCFMi;GG'5uqD|¦dpV0~qrvR?nn]ĕB b:ɍ񌄚/
\ooHڄ.>Ihں615'>Y_t4(}ɤ8ָnZl ']zV_$Ⱥeyd%!Jrn;IZrOzZfl;Ȫe(bSct=fMQMCFMi;GG'5uqD|¦dpV0~qrvR?nn]ĕB b:ɍ񌄚/
g|ϒmq뜖ɸƛsLtRȯ*.+YhtpӹY齔}||M^t1[s=g7,dsZ0GP~h8 <oJw1,a2Te,o)6#]&\n)ռ,qVQV]<q/Yy p9(3'y+JرF'({
g|ϒmq뜖ɸƛsLtRȯ*.+YhtpӹY齔}||M^t1[s=g7,dsZ0GP~h8 <oJw1,a2Te,o)6#]&\n)ռ,qVQV]<q/Yy p9(3'y+JرF'({
⚂㺂Ǐc?AӲ\et7m:lpF W%ܽ@Xi-j*1#WJHԧ-'Ɏ1))06COzŘFmM̳bH9벼;jSSSZh{pVV*[֮_ iq"j&y&J0Uݶ-[Mkj%9թ4|x<5O鰧UmL3Vǫ^,eO2&Ũn^UzъhA2ގdSiLfs6d8ƨ1/_΀f{-|VHTspe{zzbP5Ižptzbgp旘NwY
⚂㺂Ǐc?AӲ\et7m:lpF W%ܽ@Xi-j*1#WJHԧ-'Ɏ1))06COzŘFmM̳bH9벼;jSSSZh{pVV*[֮_ iq"j&y&J0Uݶ-[Mkj%9թ4|x<5O鰧UmL3Vǫ^,eO2&Ũn^UzъhA2ގdSiLfs6d8ƨ1/_΀f{-|VHTspe{zzbP5Ižptzbgp旘NwY
vUҖՉS=*4b]*chӾkTBI[yIYy7Pt{ |$GMd4;RY ҝgj)Bg/Ԁ{${Q1g/+Q+b@.wAyNUD'&KZ3S"Ziby۶бŜZȭ]i~ď-ڲPZD$J:NښWt*
vUҖՉS=*4b]*chӾkTBI[yIYy7Pt{ |$GMd4;RY ҝgj)Bg/Ԁ{${Q1g/+Q+b@.wAyNUD'&KZ3S"Ziby۶бŜZȭ]i~ď-ڲPZD$J:NښWt*
p9:0eZb^9Wk&fg2IZx}+
p9:0eZb^9Wk&fg2IZx}+
\ȎE=+l1 eK®[>`xJ^ )oBHt&Ξj H"H*U<VGBr5TWUV GM$䱆ká3{"y"U׹Ryyg+j܄*lF[P;Єbn'"'yp ]|K8^$VV5lm3#zo_k mRdu.V6'ZYX4؍5؃"Y bA)@Xï'M*ᨂƒes&'~ vpj<v˛n*Nw=s1'amt<ų0Wz)͎"zA5`sp K| NalG~`&:NZ=9QZTd_}l9DɣG<*ZT<"]הP[9g~LP^O/bt)uQ%C$l5}Wp q%l^!wVLP=)&=CL8 qO?0fҜ)y֑abtP
\ȎE=+l1 eK®[>`xJ^ )oBHt&Ξj H"H*U<VGBr5TWUV GM$䱆ká3{"y"U׹Ryyg+j܄*lF[P;Єbn'"'yp ]|K8^$VV5lm3#zo_k mRdu.V6'ZYX4؍5؃"Y bA)@Xï'M*ᨂƒes&'~ vpj<v˛n*Nw=s1'amt<ų0Wz)͎"zA5`sp K| NalG~`&:NZ=9QZTd_}l9DɣG<*ZT<"]הP[9g~LP^O/bt)uQ%C$l5}Wp q%l^!wVLP=)&=CL8 qO?0fҜ)y֑abtP
WF:n~gx+!T<?7f{ L{ߏPKVԱPK
WF:n~gx+!T<?7f{ L{ߏPKVԱPK
mRyg$(connect/chat/TwitchChatCredentials.classRN@=R°6>" &&& LdHmoX(mm}s3o/Zҡ`]CU*j*6J֐/ %wuo9<{:yض=JۡiSٽ=LAS1CD2<e6=M_]w(Ri{6wzܗp(j*^5 ] RH,@%;}e8цvGtD^Jsaw(hllH䙤3̓Q$i$v ePIkqPI&U.b)<yBfB*9MLWb-"\jYY">PKyg$PK
mRyg$(connect/chat/TwitchChatCredentials.classRN@=R°6>" &&& LdHmoX(mm}s3o/Zҡ`]CU*j*6J֐/ %wuo9<{:yض=JۡiSٽ=LAS1CD2<e6=M_]w(Ri{6wzܗp(j*^5 ] RH,@%;}e8цvGtD^Jsaw(hllH䙤3̓Q$i$v ePIkqPI&U.b)<yBfB*9MLWb-"\jYY">PKyg$PK
mRL@r`8connect/chat/TwitchChatCredentials$ChatCredentials.classT]OA=nY([RPqAR Wh0 @H,ԯUD}߄ƻB mqsϽ3ۃ__\q 7xZqaBm pv];K*nZps qϮ†]{C4=ɠmu. TJ[߰Jsp_5YE
mRL@r`8connect/chat/TwitchChatCredentials$ChatCredentials.classT]OA=nY([RPqAR Wh0 @H,ԯUD}߄ƻB mqsϽ3ۃ__\q 7xZqaBm pv];K*nZps qϮ†]{C4=ɠmu. TJ[߰Jsp_5YE
|REB%~hHˡHk㕐NiԞs7\"4|C*j{Dp9Ȟ1qՆ"Pui;O*Sk@C{zTzYۃƠ٘kL7VN^wcR_Sl
|REB%~hHˡHk㕐NiԞs7\"4|C*j{Dp9Ȟ1qՆ"Pui;O*Sk@C{zTzYۃƠ٘kL7VN^wcR_Sl
H:i1uHۥeaU(ZabMa T 7+780VvM]SFfX &PPO ˆng& ]X! z6 u'dEP*7곢7܆M g>B_B-`E;fFs,AՂ4tfD(4\#"c?1=;hj+ㄎ7SZR=:"4ْ=LUG—(e_
H:i1uHۥeaU(ZabMa T 7+780VvM]SFfX &PPO ˆng& ]X! z6 u'dEP*7곢7܆M g>B_B-`E;fFs,AՂ4tfD(4\#"c?1=;hj+ㄎ7SZR=:"4ْ=LUG—(e_
&y\S&ikbx f/E^$nXiz '0@cHx~" WF&=:6mU ):쿞HN+8K$KIVj]2*ɦN7wq2C?8I((F'MEs=e螴PKL@r`PK
&y\S&ikbx f/E^$nXiz '0@cHx~" WF&=:6mU ):쿞HN+8K$KIVj]2*ɦN7wq2C?8I((F'MEs=e螴PKL@r`PK
mR"}08META-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlU]o0}W dLSL*^mjW$ڪ&$l0MG^'^ߠcMTHƋ,ٔǬHV/6R%jم\R%9>.y\2:(Yǯ 8nSsB*\j$[J qmb{X,UPc=Gv 61DG@*Aq 6,{DPL4 )VE%C[7F(t%~5-sI5JC5M%˨W( _RX$Te5+.oh.ٳil><".ϓb٥-|~ط| p3%Lqq~:,vLi[D7Im'dp%]#˚MQU6x[_[뺋j2{~kr<W9{h&u=uz2W*OPQLᾂ)42ꋲap>֠6DG^F®݈!o,ʯ]Qy䣉tn kǴE?GA#MƄz?}3|}w؇<&J'ɇ_{ ~SW9>jdz_=ln &cb75hPK"}0PK
mR"}08META-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlU]o0}W dLSL*^mjW$ڪ&$l0MG^'^ߠcMTHƋ,ٔǬHV/6R%jم\R%9>.y\2:(Yǯ 8nSsB*\j$[J qmb{X,UPc=Gv 61DG@*Aq 6,{DPL4 )VE%C[7F(t%~5-sI5JC5M%˨W( _RX$Te5+.oh.ٳil><".ϓb٥-|~ط| p3%Lqq~:,vLi[D7Im'dp%]#˚MQU6x[_[뺋j2{~kr<W9{h&u=uz2W*OPQLᾂ)42ꋲap>֠6DG^F®݈!o,ʯ]Qy䣉tn kǴE?GA#MƄz?}3|}w؇<&J'ɇ_{ ~SW9>jdz_=ln &cb75hPK"}0PK
mRyI#]b?META-INF/maven/com.stream-pi/twitch-chat-connect/pom.properties ; НS8`H
mRyI#]b?META-INF/maven/com.stream-pi/twitch-chat-connect/pom.properties ; НS8`H
@x{(SAW9i8u|e)GhhJPX%H<A(rJLn-4`PKyI#]bPKmR4AW_META-INF/MANIFEST.MFPK
@x{(SAW9i8u|e)GhhJPX%H<A(rJLn-4`PKyI#]bPKmR4AW_META-INF/MANIFEST.MFPK
mR AMETA-INF/PK
mR AMETA-INF/PK
mRAconnect/PK
mRAconnect/PK
mR Aconnect/chat/PK
mR Aconnect/chat/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/PK
mRA>META-INF/maven/com.stream-pi/PK
mRA>META-INF/maven/com.stream-pi/PK
mR1AyMETA-INF/maven/com.stream-pi/twitch-chat-connect/PKmR module-info.classPKmRVԱ%connect/TwitchChatConnectAction.classPKmRyg$(: connect/chat/TwitchChatCredentials.classPKmRL@r`8 connect/chat/TwitchChatCredentials$ChatCredentials.classPKmR"}08nMETA-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlPKmRyI#]b?QMETA-INF/maven/com.stream-pi/twitch-chat-connect/pom.propertiesPK 
mR1AyMETA-INF/maven/com.stream-pi/twitch-chat-connect/PKmR module-info.classPKmRVԱ%connect/TwitchChatConnectAction.classPKmRyg$(: connect/chat/TwitchChatCredentials.classPKmRL@r`8 connect/chat/TwitchChatCredentials$ChatCredentials.classPKmR"}08nMETA-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlPKmRyI#]b?QMETA-INF/maven/com.stream-pi/twitch-chat-connect/pom.propertiesPK 
PK
PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR META-INF/PK
mR META-INF/PK
mR
mR
clearchat/PK
clearchat/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/com.stream-pi/PK
mRMETA-INF/maven/com.stream-pi/PK
mR/META-INF/maven/com.stream-pi/twitch-clear-chat/PK
mR/META-INF/maven/com.stream-pi/twitch-clear-chat/PK
mRȌGUclearchat/ClearChatAction.classWwYfk[lE-!`4 aL81uҳ=x<Ό7M5-isi[wgd[{{?4m؊KsJy_a:2_4!Y|8?1ۆilJaNde*'pyҨࣲPMcp]Hc/1_qH)|Jǧg8R|
mRȌGUclearchat/ClearChatAction.classWwYfk[lE-!`4 aL81uҳ=x<Ό7M5-isi[wgd[{{?4m؊KsJy_a:2_4!Y|8?1ۆilJaNde*'pyҨࣲPMcp]Hc/1_qH)|Jǧg8R|
_E u3n-gԲpպf˝CvG4t=7-7Ұ)nvJRn^\Eܤdh=ivD) ɼW&Ҭ'YG6d9So˺NL vaO('0<NBsSL^Ex<}FIUdW`sZ9+:5c}Vb˹e칱ؼcUYCa{pj_ږň:Q1Fl~ޱ@8Fx$\d860ڰ"n#cU ySǗ -.Tuz#]~I68vP00aBq鷙Rc8F%#<id N*^6
_E u3n-gԲpպf˝CvG4t=7-7Ұ)nvJRn^\Eܤdh=ivD) ɼW&Ҭ'YG6d9So˺NL vaO('0<NBsSL^Ex<}FIUdW`sZ9+:5c}Vb˹e칱ؼcUYCa{pj_ږň:Q1Fl~ޱ@8Fx$\d860ڰ"n#cU ySǗ -.Tuz#]~I68vP00aBq鷙Rc8F%#<id N*^6
^Jޜ8oU`59~nWC]S~@x_3u|CÙ0OfBuvp{܊^.8FXyy
^Jޜ8oU`59~nWC]S~@x_3u|CÙ0OfBuvp{܊^.8FXyy
#{ 6u|#3]Ql4:Iǫ~'~a?u/+MVB*NY~~+~g8?sr$]M2U`miܘALe"険2^)g\/\3s9TL/gyv5lYxq*+-!ݫ W
#{ 6u|#3]Ql4:Iǫ~'~a?u/+MVB*NY~~+~g8?sr$]M2U`miܘALe"険2^)g\/\3s9TL/gyv5lYxq*+-!ݫ W
d{;1w=i5srbg}* y:Y
d{;1w=i5srbg}* y:Y
㾳*'d{vpy-*QTaJ,m<z.ݭcccBL \Dzz \kk +ͶWrZώp{H`+4C
㾳*'d{vpy-*QTaJ,m<z.ݭcccBL \Dzz \kk +ͶWrZώp{H`+4C
:ii;8rSjΪ:]FlQQ5J* W!hsR򼺛p {T}@~Q..Qt'#mgFnzX^.oG܋͊]]XP-7y8x7J.Z,IoQ}P$ 6Jְ&ϧmri=.?.礉])ll#M-/ۢfS:$(-0vh%4>,8>0
:ii;8rSjΪ:]FlQQ5J* W!hsR򼺛p {T}@~Q..Qt'#mgFnzX^.oG܋͊]]XP-7y8x7J.Z,IoQ}P$ 6Jְ&ϧmri=.?.礉])ll#M-/ۢfS:$(-0vh%4>,8>0
r[4g@q2x3K1b1.ZaSlA&jHeͶ;hN&+0jȚ5l^t;(:v҄]ڍ؃>m_IRz;"qL-o\AWV>sG }3;}vM:p]8HQd(T E*0vjؓaR{jxݱo Wpq(&pyGk蹉=wpd̚}?/ m'80Ȉw繓<y%|!%I­s8g"Q\?
r[4g@q2x3K1b1.ZaSlA&jHeͶ;hN&+0jȚ5l^t;(:v҄]ڍ؃>m_IRz;"qL-o\AWV>sG }3;}vM:p]8HQd(T E*0vjؓaR{jxݱo Wpq(&pyGk蹉=wpd̚}?/ m'80Ȉw繓<y%|!%I­s8g"Q\?
Jتg4w9^"MO vnbK!VMɰb3Y9XL -i[ hDLFLDaDvj"PKȌGUPK
Jتg4w9^"MO vnbK!VMɰb3Y9XL -i[ hDLFLDaDvj"PKȌGUPK
mRjImodule-info.classmNN0ДGy;qUWUWG!R*K "{[R]k>F1mbZ)!!JC"F8"tNJdnpi(D8!95iC6kXL5? .m+x7aW¹'% )Y%-2aFrWW?
mRjImodule-info.classmNN0ДGy;qUWUWG!R*K "{[R]k>F1mbZ)!!JC"F8"tNJdnpi(D8!95iC6kXL5? .m+x7aW¹'% )Y%-2aFrWW?
(d#ճ7k\dž/_TU\a-,7PKjIPK
(d#ճ7k\dž/_TU\a-,7PKjIPK
mRi0" 6META-INF/maven/com.stream-pi/twitch-clear-chat/pom.xmlV]o }ϯeqUU*J1uHlcN2Mﻀ?k7yùp9.y63(֋-sVP"]/xRls`jh]^b=+) 0$dOh {yTtXY2?n@jN^(M
mRi0" 6META-INF/maven/com.stream-pi/twitch-clear-chat/pom.xmlV]o }ϯeqUU*J1uHlcN2Mﻀ?k7yùp9.y63(֋-sVP"]/xRls`jh]^b=+) 0$dOh {yTtXY2?n@jN^(M
l·m ;|qTC/bX%E²'؎E +*&19RZ2%p
l·m ;|qTC/bX%E²'؎E +*&19RZ2%p
!&#2#r-uZ rɀΔf`gL"%*IYDLe#.m_SuɟN5&2~҃E>aے=5}FWBq-d r@<\vd*pO1ⶈgQU)܋v7MyxwufϦugGw+Tzh,Baϱ-)T:5S,lrCx$epH6SRA2jԛ؆<*1#Ez`=n\sOc'BEJhhMhby?RµawJV$zt tƔhu{aw,؆C;a}JS73v9),4vyDÅ}LeއKŮgPKi0" PK
!&#2#r-uZ rɀΔf`gL"%*IYDLe#.m_SuɟN5&2~҃E>aے=5}FWBq-d r@<\vd*pO1ⶈgQU)܋v7MyxwufϦugGw+Tzh,Baϱ-)T:5S,lrCx$epH6SRA2jԛ؆<*1#Ez`=n\sOc'BEJhhMhby?RµawJV$zt tƔhu{aw,؆C;a}JS73v9),4vyDÅ}LeއKŮgPKi0" PK
mR9<\`=META-INF/maven/com.stream-pi/twitch-clear-chat/pom.properties 1
mR9<\`=META-INF/maven/com.stream-pi/twitch-clear-chat/pom.properties 1
0 (87T7qr1F[жĨ{A;/H7'@ $_e\:ÕhP4H>Q)8Q@57sjPK9<\`PKmR4AW_META-INF/MANIFEST.MFPK
0 (87T7qr1F[жĨ{A;/H7'@ $_e\:ÕhP4H>Q)8Q@57sjPK9<\`PKmR4AW_META-INF/MANIFEST.MFPK
mR AMETA-INF/PK
mR AMETA-INF/PK
mR
mR
Aclearchat/PK
Aclearchat/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/com.stream-pi/PK
mRAMETA-INF/maven/com.stream-pi/PK
mR/APMETA-INF/maven/com.stream-pi/twitch-clear-chat/PKmRȌGUclearchat/ClearChatAction.classPKmRjImodule-info.classPKmRi0" 6 META-INF/maven/com.stream-pi/twitch-clear-chat/pom.xmlPKmR9<\`= META-INF/maven/com.stream-pi/twitch-clear-chat/pom.propertiesPK
mR/APMETA-INF/maven/com.stream-pi/twitch-clear-chat/PKmRȌGUclearchat/ClearChatAction.classPKmRjImodule-info.classPKmRi0" 6 META-INF/maven/com.stream-pi/twitch-clear-chat/pom.xmlPKmR9<\`= META-INF/maven/com.stream-pi/twitch-clear-chat/pom.propertiesPK


PK
PK
$mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
$mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
$mR META-INF/PK
$mR META-INF/PK
$mR hostchannel/PK
$mR hostchannel/PK
$mRMETA-INF/maven/PK
$mRMETA-INF/maven/PK
$mRMETA-INF/maven/com.stream-pi/PK
$mRMETA-INF/maven/com.stream-pi/PK
$mR1META-INF/maven/com.stream-pi/twitch-host-channel/PK
$mR1META-INF/maven/com.stream-pi/twitch-host-channel/PK
$mR0#hostchannel/HostChannelAction.classW=cYc9 BR0ƉX3pIto;)ii(~ܑ,/ hޛ{ϹwI܋^R+:1ôԗcPK1|X)>!|m(HÌs**Vc!v R;1ڕ1x2ߏ#@91\8cI漢c>.''>gTGK*>1|!7WT|UA<_4Ǵ5y㪑 g. <˙;mupI.
$mR0#hostchannel/HostChannelAction.classW=cYc9 BR0ƉX3pIto;)ii(~ܑ,/ hޛ{ϹwI܋^R+:1ôԗcPK1|X)>!|m(HÌs**Vc!v R;1ڕ1x2ߏ#@91\8cI漢c>.''>gTGK*>1|!7WT|UA<_4Ǵ5y㪑 g. <˙;mupI.
:jB-(̜ {2RRGI˱S
:jB-(̜ {2RRGI˱S
n6g-+/Κބ1kYҮuF+ؓ-^xFlWOuh]{nˤZD<X)Y#1꟥RQS$.XGN;w=oDFb\9l[ɼkcT) ,U| v*Fh JH CL8. C[#0jB:qNXκ׈;s^<oûsNFL11GrVzwF(9.#hJTi$*f 4|ojM ö( W,;s|LVk] +A?aM:1Iu}Ae@|9`99Ab#o' Ժ~*?RHn Rů4744S{ 5 7jgʖ]0= M x
n6g-+/Κބ1kYҮuF+ؓ-^xFlWOuh]{nˤZD<X)Y#1꟥RQS$.XGN;w=oDFb\9l[ɼkcT) ,U| v*Fh JH CL8. C[#0jB:qNXκ׈;s^<oûsNFL11GrVzwF(9.#hJTi$*f 4|ojM ö( W,;s|LVk] +A?aM:1Iu}Ae@|9`99Ab#o' Ժ~*?RHn Rů4744S{ 5 7jgʖ]0= M x
oi p'UPXFL%0;V#<QU;a`+òp`Z#}` VH'i<8Bqu~_do&o)a3(|jZ҇v繞- ϕw\oq%~2cac%>52|33]wd@7qưpu=^&-ߚl+Xqr əA&VN=]»%922"qd3is?й2T"#c(xh-KLxY/Rut0ezwp 3%NPu]{=NAAEs#ɃvP_5#<X[i)cy2`,7JGeOm;FIqoUQ\6q}' 6.L wdfk#Q<+{5O7cmm/wjwiٳp.g7'mm<P935I`5H{޴#&b.z;ʗ[˧z-Nۈm4
oi p'UPXFL%0;V#<QU;a`+òp`Z#}` VH'i<8Bqu~_do&o)a3(|jZ҇v繞- ϕw\oq%~2cac%>52|33]wd@7qưpu=^&-ߚl+Xqr əA&VN=]»%922"qd3is?й2T"#c(xh-KLxY/Rut0ezwp 3%NPu]{=NAAEs#ɃvP_5#<X[i)cy2`,7JGeOm;FIqoUQ\6q}' 6.L wdfk#Q<+{5O7cmm/wjwiٳp.g7'mm<P935I`5H{޴#&b.z;ʗ[˧z-Nۈm4
Ԕ5 7Um*,)-B `BemWn>ЃD}؉E$=8͙Z6`I֣wOMoa2imi}{;3VGG]{8/{sS\m3z}8҄tAJ#h
Ԕ5 7Um*,)-B `BemWn>ЃD}؉E$=8͙Z6`I֣wOMoa2imi}{;3VGG]{8/{sS\m3z}8҄tAJ#h
:<) pQ H{h vP!F_Φ+ؓ 7UѰ6Ƹ89g?xHF/J 9̔>5C- DD˿(#+J1qlt$<4Y:4*\jph /ѥGɹrhUFUtS5Qan"2B￁lH~xvlsɕ%ViFN J8t9d8JMSd'67\DPK0PK
:<) pQ H{h vP!F_Φ+ؓ 7UѰ6Ƹ89g?xHF/J 9̔>5C- DD˿(#+J1qlt$<4Y:4*\jph /ѥGɹrhUFUtS5Qan"2B￁lH~xvlsɕ%ViFN J8t9d8JMSd'67\DPK0PK
$mR0!b?module-info.classmNN0ДGyn8 3BB .p !i|>Blkya~|~a?"э#B'/E]75U}5˾ :+ <{8!WT&2wYH73NTFؔ* y:p&&և5o&p ;mBWz<LNdRG
$mR0!b?module-info.classmNN0ДGyn8 3BB .p !i|>Blkya~|~a?"э#B'/E]75U}5˾ :+ <{8!WT&2wYH73NTFؔ* y:p&&և5o&p ;mBWz<LNdRG
zAjD jpypu]a|JMFmUu~
zAjD jpypu]a|JMFmUu~
w .߽_PK0!b?PK
w .߽_PK0!b?PK
$mRPkB^b?META-INF/maven/com.stream-pi/twitch-host-channel/pom.properties ʱ
$mRPkB^b?META-INF/maven/com.stream-pi/twitch-host-channel/pom.properties ʱ
ݯ=
ݯ=
!R(0
!R(0
zy<oBV%]yZ49(,6$A OU yus!EA PKPkB^bPK
zy<oBV%]yZ49(,6$A OU yus!EA PKPkB^bPK
mR19$ 8META-INF/maven/com.stream-pi/twitch-host-channel/pom.xmlV]o }ϯeqUU*J1IlcN2Mﻀ?p4yùp9.E>2(WgSVR2]͞WxURS`j5˴dJD*B3L{ aq{;nCe~C$Ҥ)Th[{80<,UB$,v;XİR)kSQ %#EP+BfA&hFʒ ;ݒ[5b@gPMv;xs&,fi"SDzoJOӟ4OdCäG+mFը>1InM(rs-"|$Z^xmI7R<66TCbp7]/5ϛ)*S.nCϝ`́Qώ^ ЫMFk
mR19$ 8META-INF/maven/com.stream-pi/twitch-host-channel/pom.xmlV]o }ϯeqUU*J1IlcN2Mﻀ?p4yùp9.E>2(WgSVR2]͞WxURS`j5˴dJD*B3L{ aq{;nCe~C$Ҥ)Th[{80<,UB$,v;XİR)kSQ %#EP+BfA&hFʒ ;ݒ[5b@gPMv;xs&,fi"SDzoJOӟ4OdCäG+mFը>1InM(rs-"|$Z^xmI7R<66TCbp7]/5ϛ)*S.nCϝ`́Qώ^ ЫMFk
lhmLzЇ})XׯdFx$epH6RRAr5ԛ؆<|"=h'r±|i-ɡEM7h&#,|'beG:@[4pG}tÇ#-ρ0ym1<PiuVfSrA3 l7<Sao6(>އKĮ'PK19$ PK$mR4AW_META-INF/MANIFEST.MFPK
lhmLzЇ})XׯdFx$epH6RRAr5ԛ؆<|"=h'r±|i-ɡEM7h&#,|'beG:@[4pG}tÇ#-ρ0ym1<PiuVfSrA3 l7<Sao6(>އKĮ'PK19$ PK$mR4AW_META-INF/MANIFEST.MFPK
$mR AMETA-INF/PK
$mR AMETA-INF/PK
$mR Ahostchannel/PK
$mR Ahostchannel/PK
$mRAMETA-INF/maven/PK
$mRAMETA-INF/maven/PK
$mRAMETA-INF/maven/com.stream-pi/PK
$mRAMETA-INF/maven/com.stream-pi/PK
$mR1ARMETA-INF/maven/com.stream-pi/twitch-host-channel/PK$mR0#hostchannel/HostChannelAction.classPK$mR0!b?" module-info.classPK$mRPkB^b?e
$mR1ARMETA-INF/maven/com.stream-pi/twitch-host-channel/PK$mR0#hostchannel/HostChannelAction.classPK$mR0!b?" module-info.classPK$mRPkB^b?e
META-INF/maven/com.stream-pi/twitch-host-channel/pom.propertiesPKmR19$ 80 META-INF/maven/com.stream-pi/twitch-host-channel/pom.xmlPK
META-INF/maven/com.stream-pi/twitch-host-channel/pom.propertiesPKmR19$ 80 META-INF/maven/com.stream-pi/twitch-host-channel/pom.xmlPK
*
*
PK
PK
%mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
%mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
%mR META-INF/PK
%mR META-INF/PK
%mR raidchannel/PK
%mR raidchannel/PK
%mRMETA-INF/maven/PK
%mRMETA-INF/maven/PK
%mRMETA-INF/maven/com.stream-pi/PK
%mRMETA-INF/maven/com.stream-pi/PK
%mR1META-INF/maven/com.stream-pi/twitch-raid-channel/PK
%mR1META-INF/maven/com.stream-pi/twitch-raid-channel/PK
%mRbmodule-info.classmNN0ДGyn8 B⌐8 W !ԡWG!6IK[<އgf>\`>"ɍIB's"MΌ}qU+Bj tXe_`esK*S29yH?5^dPI7Z|V^J*I f!g^;~ޖOSΙ^d]b}U\68zƧul{c1_hUUXa-,wPKbPK
%mRbmodule-info.classmNN0ДGyn8 B⌐8 W !ԡWG!6IK[<އgf>\`>"ɍIB's"MΌ}qU+Bj tXe_`esK*S29yH?5^dPI7Z|V^J*I f!g^;~ޖOSΙ^d]b}U\68zƧul{c1_hUUXa-,wPKbPK
%mR?/#raidchannel/RaidChannelAction.classW=#ɞ3fs@d[ -` q#96Mݱ4cgpIto;)ii(~ܑ,/ hޛ{ϹwI܋^p0%e ~IÇ#LgThEA+RϪSa` qp4,Jj8''EQ|_#@9Q\8cI漢c>.''>3*^#ץYSy _F|Qz
%mR?/#raidchannel/RaidChannelAction.classW=#ɞ3fs@d[ -` q#96Mݱ4cgpIto;)ii(~ܑ,/ hޛ{ϹwI܋^p0%e ~IÇ#LgThEA+RϪSa` qp4,Jj8''EQ|_#@9Q\8cI漢c>.''>3*^#ץYSy _F|Qz
9u-9kI7tg3
9u-9kI7tg3
Z<n0a:eKA{MbܻhڅP)f
Z<n0a:eKA{MbܻhڅP)f
yo13k/,dž̸|vhؐWY۵Fˋ3?n83ak`.)ؓif<#ߧ&F|hmQDVp"DV
yo13k/,dž̸|vhؐWY۵Fˋ3?n83ak`.)ؓif<#ߧ&F|hmQDVp"DV
|\.36ŪRQS$.XGN;w=oEFb<9s#uk[My*Xn`NI(ONj}!,!aG>S soh \`FbS_'n͕5缲; u<S3uQJOM#eDM*\,oM·I}P~b:N;2g•\Qe&
|\.36ŪRQS$.XGN;w=oEFb<9s#uk[My*Xn`NI(ONj}!,!aG>S soh \`FbS_'n͕5缲; u<S3uQJOM#eDM*\,oM·I}P~b:N;2g•\Qe&
At<( 3'E/ B,~ Y B?9h<Uu??a]SϤy@"~{78[/Kku'TQb)Nu7uܒ)/x[ Tq[G
At<( 3'E/ B,~ Y B?9h<Uu??a]SϤy@"~{78[/Kku'TQb)Nu7uܒ)/x[ Tq[G
J`Fy;wa \@%VeF@,Nx`+;J}c%+K sִsW$l®>|l(`+ +?Ο-PQsؙG tg Wgek.3cKn!9+84f&DSO9ݜθWSIAo2Ws?й2T$g<[hmGT&]*:Ru 鰮ezwp 3%Pu]{=NAAEȳ#ɃvPt[n[k:y_ӬC dhXnͣ*%۱Vw =ުh+ 7*mQn6l]0lނ:(LGiFjknpڨ_@0^S̷+g\nO4$VxGxVk< x. a/Gxӎn˛Cv/#~7OL-CIۈm4
J`Fy;wa \@%VeF@,Nx`+;J}c%+K sִsW$l®>|l(`+ +?Ο-PQsؙG tg Wgek.3cKn!9+84f&DSO9ݜθWSIAo2Ws?й2T$g<[hmGT&]*:Ru 鰮ezwp 3%Pu]{=NAAEȳ#ɃvPt[n[k:y_ӬC dhXnͣ*%۱Vw =ުh+ 7*mQn6l]0lނ:(LGiFjknpڨ_@0^S̷+g\nO4$VxGxVk< x. a/Gxӎn˛Cv/#~7OL-CIۈm4
ԔUВVO*Sw:FV^[L!β6Omv"݁^a"nLjg0ZY⊄ng]F-l]0mtU-ml`GvH}F7Gd4ttn2్֗@oFc7G@<HXidMTԀR9'4Wϲ?ƞuUUԮU6hl=
ԔUВVO*Sw:FV^[L!β6Omv"݁^a"nLjg0ZY⊄ng]F-l]0mtU-ml`GvH}F7Gd4ttn2్֗@oFc7G@<HXidMTԀR9'4Wϲ?ƞuUUԮU6hl=
F􌄍X179XF26|Qj#d?w}@]d&OZ?nG^%"XY㫓+C8z t%J-/<DSИp1SND%QQZ;UTtU5^an"2B￁lHqx6lsɕ%ViFA J8t9d8JI_)B1Y M_PK?/PK
F􌄍X179XF26|Qj#d?w}@]d&OZ?nG^%"XY㫓+C8z t%J-/<DSИp1SND%QQZ;UTtU5^an"2B￁lHqx6lsɕ%ViFA J8t9d8JI_)B1Y M_PK?/PK
%mR=J(`b?META-INF/maven/com.stream-pi/twitch-raid-channel/pom.properties 10 = -CՉGi,$2/TF_?HWaξDm.dC+F%(JTVV#PK=J(`bPK
%mR=J(`b?META-INF/maven/com.stream-pi/twitch-raid-channel/pom.properties 10 = -CՉGi,$2/TF_?HWaξDm.dC+F%(JTVV#PK=J(`bPK
mR$ 8META-INF/maven/com.stream-pi/twitch-raid-channel/pom.xmlV]o }ϯe*MjV{$'M=p.\K1{*$fbN cV$jqP)5BnRipIJ |~?e6wQ8aeSsB*\j$[K q-)Q ,xUPc=Gv 63DG@*Aq 6,{DP"i 0⢠޸bG[rﯦe.SiHx2* 4
mR$ 8META-INF/maven/com.stream-pi/twitch-raid-channel/pom.xmlV]o }ϯe*MjV{$'M=p.\K1{*$fbN cV$jqP)5BnRipIJ |~?e6wQ8aeSsB*\j$[K q-)Q ,xUPc=Gv 63DG@*Aq 6,{DP"i 0⢠޸bG[rﯦe.SiHx2* 4
CGF UcYr{`7h~S~'ŲLhMZ5&fx5Ex >'j@ВKo_-S`;8,nG*EƆRЧMyq[KŲzJTfUoFs6zywufϨugGw/X?jXtžc[=RRSau
CGF UcYr{`7h~S~'ŲLhMZ5&fx5Ex >'j@ВKo_-S`;8,nG*EƆRЧMyq[KŲzJTfUoFs6zywufϨugGw/X?jXtžc[=RRSau
**Yׯd%x8lا$gը7 y$"=6h'r±!xeI%P~EM7h&v#,\|ǴEߏPwηԡ4(NhOGZ̟0żcy6EE;;T0V/gqft3 l7<Sk7AgTJ_/Tv}x^:}_hPK$ PK%mR4AW_META-INF/MANIFEST.MFPK
**Yׯd%x8lا$gը7 y$"=6h'r±!xeI%P~EM7h&v#,\|ǴEߏPwηԡ4(NhOGZ̟0żcy6EE;;T0V/gqft3 l7<Sk7AgTJ_/Tv}x^:}_hPK$ PK%mR4AW_META-INF/MANIFEST.MFPK
%mR AMETA-INF/PK
%mR AMETA-INF/PK
%mR Araidchannel/PK
%mR Araidchannel/PK
%mRAMETA-INF/maven/PK
%mRAMETA-INF/maven/PK
%mRAMETA-INF/maven/com.stream-pi/PK
%mRAMETA-INF/maven/com.stream-pi/PK
%mR1ARMETA-INF/maven/com.stream-pi/twitch-raid-channel/PK%mRbmodule-info.classPK%mR?/#raidchannel/RaidChannelAction.classPK%mR=J(`b?e
%mR1ARMETA-INF/maven/com.stream-pi/twitch-raid-channel/PK%mRbmodule-info.classPK%mR?/#raidchannel/RaidChannelAction.classPK%mR=J(`b?e
META-INF/maven/com.stream-pi/twitch-raid-channel/pom.propertiesPKmR$ 82 META-INF/maven/com.stream-pi/twitch-raid-channel/pom.xmlPK
META-INF/maven/com.stream-pi/twitch-raid-channel/pom.propertiesPKmR$ 82 META-INF/maven/com.stream-pi/twitch-raid-channel/pom.xmlPK
+
+
PK
PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR META-INF/PK
mR META-INF/PK
mRsendchannelmsg/PK
mRsendchannelmsg/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/com.stream-pi/PK
mRMETA-INF/maven/com.stream-pi/PK
mR5META-INF/maven/com.stream-pi/twitch-send-channel-msg/PK
mR5META-INF/maven/com.stream-pi/twitch-send-channel-msg/PK
mR)G module-info.classmNN0ДGy $R{e\wq(PJ%3ϯ'CSRD:ٳ/b.A%1ty?8!L!Krr%LsNNUXNE$!6Uf'a.u_tB譋o$fp_p}+қ_Se&OER CEn~&/ =@Y+&|Ml
mR)G module-info.classmNN0ДGy $R{e\wq(PJ%3ϯ'CSRD:ٳ/b.A%1ty?8!L!Krr%LsNNUXNE$!6Uf'a.u_tB譋o$fp_p}+қ_Se&OER CEn~&/ =@Y+&|Ml
MFba
MFba
w*®{PK)G PK
w*®{PK)G PK
mR3<T-sendchannelmsg/SendChannelMessageAction.classW=#YcVCbYƅPC 'q15uҳ<xΌtI6 iiho?y3cY ?IowϹE[p o'pc ]Y8$X4yYLF .(&!;qdT܆X XÖu9?. '7Oί&pu]K|ByQ'StY|V\KxYT|1/e$0$0ѯ8
mR3<T-sendchannelmsg/SendChannelMessageAction.classW=#YcVCbYƅPC 'q15uҳ<xΌtI6 iiho?y3cY ?IowϹE[p o'pc ]Y8$X4yYLF .(&!;qdT܆X XÖu9?. '7Oί&pu]K|ByQ'StY|V\KxYT|1/e$0$0ѯ8
: Km kXω5znٸjd-.ecڥe ۛ5`?ԚtKRwtVʫْ%YrQ6
: Km kXω5znٸjd-.ecڥe ۛ5`?ԚtKRwtVʫْ%YrQ6
Yrl˙.gX^.֬ᘲ
Yrl˙.gX^.֬ᘲ
cޒ*Ϲ.W]cw<"\(S,۴)M;p<SP9XYכ7J7F6}U8s *Rt vŠ(*
cޒ*Ϲ.W]cw<"\(S,۴)M;p<SP9XYכ7J7F6}U8s *Rt vŠ(*
\(Qg['?o|S@ig2\W:B&,Ay^ai-}RC
\(Qg['?o|S@ig2\W:B&,Ay^ai-}RC
ln{FaeҨnWmr)w|\r)#!L(R=2onaUÓ8FVrF1rdh2\Uw*=0U JyѰ,19V=^K٠G3KWqOdRuahS{x. c4mOW}sKA}j~.II4~)ah+_Kmo*~~xJ'Ukx]f{jZEh5!QMÛFT4㶆XWW0$bbcXD65ŤWNJ%C.z>/Wb.{p ':HV,a"9kIdwe1 [ ;pWR8NQc11첳^)q ? yp3ï;u/v7exY5L&p8ߝ6ly0.K6N=U$Ą&~Әܻ֩o:sªf}rZZ3&QpzO\/=bW'y6݊eQХ@,U+TiG{L,w"oƵ.{:u=_M'!݂'Swۭ:A8;{XVmrO|٦yoi_(|T$&ovΛӦ7LyEpgo!Yв n{BO7yl&χ eEyfy\m=GG/*R4{O(|\g/._~?ElP ˓콂V:hZBKZoAMi-}sht5lKkqӷ44,im`E~9S lX+'5⌲}N|6f]5{j؛!}h,st@Mh&?V?<Dhq#CO EV9i@heq3?VP%
ln{FaeҨnWmr)w|\r)#!L(R=2onaUÓ8FVrF1rdh2\Uw*=0U JyѰ,19V=^K٠G3KWqOdRuahS{x. c4mOW}sKA}j~.II4~)ah+_Kmo*~~xJ'Ukx]f{jZEh5!QMÛFT4㶆XWW0$bbcXD65ŤWNJ%C.z>/Wb.{p ':HV,a"9kIdwe1 [ ;pWR8NQc11첳^)q ? yp3ï;u/v7exY5L&p8ߝ6ly0.K6N=U$Ą&~Әܻ֩o:sªf}rZZ3&QpzO\/=bW'y6݊eQХ@,U+TiG{L,w"oƵ.{:u=_M'!݂'Swۭ:A8;{XVmrO|٦yoi_(|T$&ovΛӦ7LyEpgo!Yв n{BO7yl&χ eEyfy\m=GG/*R4{O(|\g/._~?ElP ˓콂V:hZBKZoAMi-}sht5lKkqӷ44,im`E~9S lX+'5⌲}N|6f]5{j؛!}h,st@Mh&?V?<Dhq#CO EV9i@heq3?VP%
id|Zm=_ m\bbc e|rMא#5wĂshns:R7kH@DA}.EmoO&AH>a"c̦8q8τ?{ StbY"bs%i ?M;ݸrs^D)1]*&U EE.7]{E?A{ lT߯ঢ;1"yJ/P~#y%./i>GCĤ5``%. f¬J'PK3<TPK
id|Zm=_ m\bbc e|rMא#5wĂshns:R7kH@DA}.EmoO&AH>a"c̦8q8τ?{ StbY"bs%i ?M;ݸrs^D)1]*&U EE.7]{E?A{ lT߯ঢ;1"yJ/P~#y%./i>GCĤ5``%. f¬J'PK3<TPK
mRQLbfCMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.properties ʱ
mRQLbfCMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.properties ʱ
0 н_QpnP7q>"F[iis{Zv)HO;k)'hJ4X5nH^Q)åkYzPKQLbfPK
0 н_QpnP7q>"F[iis{Zv)HO;k)'hJ4X5nH^Q)åkYzPKQLbfPK
mRØh>( <META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlVn }WD^ 2MU帪*MjV{$'.`;8<t{\WoT\T B`**R^eKx\%bͨR ׺ĸ$[V!R3$dOh{Wv;[Z"?n@jIB^)M*l·m ;|WCC "eœybb<fI_ӄ)-)ÚǸ H_4Ґ椪X*1)I+5:Sj
mRØh>( <META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlVn }WD^ 2MU帪*MjV{$'.`;8<t{\WoT\T B`**R^eKx\%bͨR ׺ĸ$[V!R3$dOh{Wv;[Z"?n@jIB^)M*l·m ;|WCC "eœybb<fI_ӄ)-)ÚǸ H_4Ґ椪X*1)I+5:Sj
[j^0h$eIx|d4K1=Վ,{~M5V:9>LԼIVQ=1$M&[1~$Zȃ=4Ys & .b~Eb>n:<ϋ"^Sudp;\܅C 9X:Wی΢K ؞ƘB@QfJ}MDĈG2d!%PCEm8ïc<Rǝ0y\hD^xHr,?8`FQ oo磉rn kSVC7pzpNci(1%z>i1_;GlC Uq}J3~6To ahr}Jp!l?S٩u0{_PKØh>( PKmR4AW_META-INF/MANIFEST.MFPK
[j^0h$eIx|d4K1=Վ,{~M5V:9>LԼIVQ=1$M&[1~$Zȃ=4Ys & .b~Eb>n:<ϋ"^Sudp;\܅C 9X:Wی΢K ؞ƘB@QfJ}MDĈG2d!%PCEm8ïc<Rǝ0y\hD^xHr,?8`FQ oo磉rn kSVC7pzpNci(1%z>i1_;GlC Uq}J3~6To ahr}Jp!l?S٩u0{_PKØh>( PKmR4AW_META-INF/MANIFEST.MFPK
mR AMETA-INF/PK
mR AMETA-INF/PK
mRAsendchannelmsg/PK
mRAsendchannelmsg/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/com.stream-pi/PK
mRAMETA-INF/maven/com.stream-pi/PK
mR5AUMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/PKmR)G module-info.classPKmR3<T-sendchannelmsg/SendChannelMessageAction.classPKmRQLbfC
mR5AUMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/PKmR)G module-info.classPKmR3<T-sendchannelmsg/SendChannelMessageAction.classPKmRQLbfC
META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.propertiesPKmRØh>( <^ META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlPK
META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.propertiesPKmRØh>( <^ META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlPK
^
^
PK
PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR META-INF/PK
mR META-INF/PK
mR setcolor/PK
mR setcolor/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/com.stream-pi/PK
mRMETA-INF/maven/com.stream-pi/PK
mR.META-INF/maven/com.stream-pi/twitch-set-color/PK
mR.META-INF/maven/com.stream-pi/twitch-set-color/PK
mRPeLFsetcolor/SetColorAction.classW=#Y=fap-E 0I
mRPeLFsetcolor/SetColorAction.classW=#Y=fap-E 0I
88شuҳ=x<RgFi}t7A$TsG ?{{=oxo%pqLW# Sq|TjK8
88شuҳ=x<RgFi}t7A$TsG ?{{=oxo%pqLW# Sq|TjK8
RuZ1#8椶u\1 p(I]cR{Rqqe~%E\O`7yI'RA|JO $Y|.BEiIǗu|%2~#o-V\W9#ւ4k֢q,w6<۝К-~`T<K%뚂7aGPZ'3&%m4];xZC4ux\C,[*֜´ƬiG Rr-ϖv3پ9_ɫ t~%W*+/''(JCFks5lYxZ*+5e~kF2u7KB*Pɭ:va^5D ѺkPx_w>;gٵN zY} (ᲣdE Mmjӑ^*Ԑ0?lCu|,\%8[NR+$s#|n[󤆎bBIhdh
RuZ1#8椶u\1 p(I]cR{Rqqe~%E\O`7yI'RA|JO $Y|.BEiIǗu|%2~#o-V\W9#ւ4k֢q,w6<۝К-~`T<K%뚂7aGPZ'3&%m4];xZC4ux\C,[*֜´ƬiG Rr-ϖv3پ9_ɫ t~%W*+/''(JCFks5lYxZ*+5e~kF2u7KB*Pɭ:va^5D ѺkPx_w>;gٵN zY} (ᲣdE Mmjӑ^*Ԑ0?lCu|,\%8[NR+$s#|n[󤆎bBIhdh
9ŐW ?kG q**dztU,*'xd?6Tù ('3d0WX[ՊR B,mjֳ]?7 R@L: Z)6BQS:nhOx57j︥aoyb;EE ᖁH^7pU8ci˄`/N_ %`;(]@a9i80j[EA))Ϫ䊠u_Ȗ*N1閂3diOߓwQ/Yvd-%Yv${A뱾ψ&<O<vn^;J-y +ʌȃ NfjjvmOsv gd-Q}{v`i+[z 8\9kSSOW99544$ Y_czRwߊ SN=cƖ֜44' <s XzHcW:keZe5cUUI<hgeVہy]]=."A"Yx(W<sw,kE:ۢ<z(7'v-.oGmzkOm j ie6VWY'>zDMrkUgSl[~y"d>&f
9ŐW ?kG q**dztU,*'xd?6Tù ('3d0WX[ՊR B,mjֳ]?7 R@L: Z)6BQS:nhOx57j︥aoyb;EE ᖁH^7pU8ci˄`/N_ %`;(]@a9i80j[EA))Ϫ䊠u_Ȗ*N1閂3diOߓwQ/Yvd-%Yv${A뱾ψ&<O<vn^;J-y +ʌȃ NfjjvmOsv gd-Q}{v`i+[z 8\9kSSOW99544$ Y_czRwߊ SN=cƖ֜44' <s XzHcW:keZe5cUUI<hgeVہy]]=."A"Yx(W<sw,kE:ۢ<z(7'v-.oGmzkOm j ie6VWY'>zDMrkUgSl[~y"d>&f
ù| 6 t9̛֚Uq$_|<g0 ("gʫb gʲ_cݑ^6#Mh.6 ؊q:lp4 hfszڌWђVH[0w:FVִ^EǚGIc7=ak/xdᄎs3U2LA=|y ۖ5wTU^Bj}^8'{'b}*Y&@9Hh7b
ù| 6 t9̛֚Uq$_|<g0 ("gʫb gʲ_cݑ^6#Mh.6 ؊q:lp4 hfszڌWђVH[0w:FVִ^EǚGIc7=ak/xdᄎs3U2LA=|y ۖ5wTU^Bj}^8'{'b}*Y&@9Hh7b
03&}ȡ?Cng"J^xz؟"iF8PEp؈#D{﫢6Rב R=NDwWEM$O"3a|>$rxG޺E,]
03&}ȡ?Cng"J^xz؟"iF8PEp؈#D{﫢6Rב R=NDwWEM$O"3a|>$rxG޺E,]
QEø|)cxȎa;EN3k]TQL2HL3GVpz&c::ut @j_
QEø|)cxȎa;EN3k]TQL2HL3GVpz&c::ut @j_
Rň$<~0ԣ汕tJc5=ȽNDmERÎpOa "d \(iPKPeLFPK
Rň$<~0ԣ汕tJc5=ȽNDmERÎpOa "d \(iPKPeLFPK
mRimodule-info.classmNN0ДG84g .^cTCW^.|j'R<ޝ'1 ĔT:Q^jD]W}E1>]g` 'N ?SgҤt]j+gPVBZm2Bǻ'Q-0$kT5?9!˔Gx=:#\:Q+Hj"z fhO;@hbqZk
mRimodule-info.classmNN0ДG84g .^cTCW^.|j'R<ޝ'1 ĔT:Q^jD]W}E1>]g` 'N ?SgҤt]j+gPVBZm2Bǻ'Q-0$kT5?9!˔Gx=:#\:Q+Hj"z fhO;@hbqZk
+Vu=XPKiPK
+Vu=XPKiPK
mR)@! 5META-INF/maven/com.stream-pi/twitch-set-color/pom.xmlV]o }ϯe*MjV{$'M=p.\Kձȗ{*$&*XҒ&x|^WUo)QK.&Ȕ.!,WdpwXYKǽ<J8-jw?tjCVJKBmd·`e ;rqC:b
mR)@! 5META-INF/maven/com.stream-pi/twitch-set-color/pom.xmlV]o }ϯe*MjV{$'M=p.\Kձȗ{*$&*XҒ&x|^WUo)QK.&Ȕ.!,WdpwXYKǽ<J8-jw?tjCVJKBmd·`e ;rqC:b
*xB'؎!8
*xB'؎!8
^W_H%(.Š!†b/(S$ %U!9z(GnָN
^W_H%(.Š!†b/(S$ %U!9z(GnָN
^˩ׂ8RXTMe5#.]#uŞΎg2a҃U&ꆗ <7ﱦ] gFnĆ).z;4Ēx˔v0 KZ&)w|^\Uyk-6]ޝp9pi]-㏽d]h؎@}GJek7aIc#N>$))ǹb Mla|Dk[aWԉ^x,vtN'tn kZ2яG:@X}~O?#aym!6ww4e*nWrfnxqo6o(m^_Tv}xA:}xPK)@! PK
^˩ׂ8RXTMe5#.]#uŞΎg2a҃U&ꆗ <7ﱦ] gFnĆ).z;4Ēx˔v0 KZ&)w|^\Uyk-6]ޝp9pi]-㏽d]h؎@}GJek7aIc#N>$))ǹb Mla|Dk[aWԉ^x,vtN'tn kZ2яG:@X}~O?#aym!6ww4e*nWrfnxqo6o(m^_Tv}xA:}xPK)@! PK
mR0.[_<META-INF/maven/com.stream-pi/twitch-set-color/pom.properties ʱ@@ 5Db3#KKg~x뻄@V+ sKr@!EjqAF[ldu7krPPK0.[_PKmR4AW_META-INF/MANIFEST.MFPK
mR0.[_<META-INF/maven/com.stream-pi/twitch-set-color/pom.properties ʱ@@ 5Db3#KKg~x뻄@V+ sKr@!EjqAF[ldu7krPPK0.[_PKmR4AW_META-INF/MANIFEST.MFPK
mR AMETA-INF/PK
mR AMETA-INF/PK
mR Asetcolor/PK
mR Asetcolor/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/com.stream-pi/PK
mRAMETA-INF/maven/com.stream-pi/PK
mR.AOMETA-INF/maven/com.stream-pi/twitch-set-color/PKmRPeLFsetcolor/SetColorAction.classPKmRi2 module-info.classPKmR)@! 5t
mR.AOMETA-INF/maven/com.stream-pi/twitch-set-color/PKmRPeLFsetcolor/SetColorAction.classPKmRi2 module-info.classPKmR)@! 5t
META-INF/maven/com.stream-pi/twitch-set-color/pom.xmlPKmR0.[_<h META-INF/maven/com.stream-pi/twitch-set-color/pom.propertiesPK
META-INF/maven/com.stream-pi/twitch-set-color/pom.xmlPKmR0.[_<h META-INF/maven/com.stream-pi/twitch-set-color/pom.propertiesPK
-
-
PK
PK
'mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
'mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
'mR META-INF/PK
'mR META-INF/PK
'mRstartcommercial/PK
'mRstartcommercial/PK
'mRMETA-INF/maven/PK
'mRMETA-INF/maven/PK
'mRMETA-INF/maven/com.stream-pi/PK
'mRMETA-INF/maven/com.stream-pi/PK
'mR5META-INF/maven/com.stream-pi/twitch-start-commercial/PK
'mR5META-INF/maven/com.stream-pi/twitch-start-commercial/PK
'mR$?umodule-info.classmNN0ДGyzAig .^cTCW^.|ؤ<K¡+rmnlb=9ٳ/jͻ*%!4b9BIW@
'mR$?umodule-info.classmNN0ДGyzAig .^cTCW^.|ؤ<K¡+rmnlb=9ٳ/jͻ*%!4b9BIW@
8pBhB8.S&Vz {&V%J{2B4jtׅ \Fjb XMkxp΢h)ViXt_ ?GÒ_/ ԱMl{c1m*Vخp PK$?uPK
8pBhB8.S&Vz {&V%J{2B4jtׅ \Fjb XMkxp΢h)ViXt_ ?GÒ_/ ԱMl{c1m*Vخp PK$?uPK
'mRq+startcommercial/StartCommercialAction.classW {=#ˌǎY !bE`A$r 6iX[#uf8M5i[MwPi(Im Fg-9wߛ7ʫ_QtOD{>&KQzRT(Jnj*,3+aE /+'EEEp>ЄY<%OG 1|P~TDGQOEi5?+ϩ/D|Y_k
'mRq+startcommercial/StartCommercialAction.classW {=#ˌǎY !bE`A$r 6iX[#uf8M5i[MwPi(Im Fg-9wߛ7ʫ_QtOD{>&KQzRT(Jnj*,3+aE /+'EEEp>ЄY<%OG 1|P~TDGQOEi5?+ϩ/D|Y_k
ZEݶ kP15fIJgszTsL{ꀂtv=Fub(h*T3K7ikLjʜNԈT_qдMDǨpT"dMLΈ>ab׭Q1_*ؕ%ǣɛEtGZذS*gTmZQ9>slt_,FmY.g zB(K6b4@f%;h-3?m
ZEݶ kP15fIJgszTsL{ꀂtv=Fub(h*T3K7ikLjʜNԈT_qдMDǨpT"dMLΈ>ab׭Q1_*ؕ%ǣɛEtGZذS*gTmZQ9>slt_,FmY.g zB(K6b4@f%;h-3?m
,qHUu꧋^*2$-uQ/9PR扟|qe}Rky;Y7Ƞdhp˕*N8nt0(h-|Ʀϸyyow_-腀E\`k^mLgO&u`#ӷ޼ϴR ǥhP jX+V&zmЭpy>nni{T@Cv]G*~G(~L?%5D@hK}Ⱏe ?E<_*~׸2~
,qHUu꧋^*2$-uQ/9PR扟|qe}Rky;Y7Ƞdhp˕*N8nt0(h-|Ʀϸyyow_-腀E\`k^mLgO&u`#ӷ޼ϴR ǥhP jX+V&zmЭpy>nni{T@Cv]G*~G(~L?%5D@hK}Ⱏe ?E<_*~׸2~
j5  ຊiW5lw+U0  ?ᰊ74!L-R`ȶ.YM .mu:[lKrD΀-ĽR]d
j5  ຊiW5lw+U0  ?ᰊ74!L-R`ȶ.YM .mu:[lKrD΀-ĽR]d
ӥU%x2t׈{l\MGC?%"vh*n8NQjx=ovəԠߙ{< S󄻆5[$&Hhިez;g8<D98mIqQ\ɩG*^QxHd2FE?8mLщ' ;>N#e[y<3}we&l/b«ng]+VpuvOfr#ܻs2chR.QneWZ)qK9gORB<H8hK,"i ^ ޥWwp˺[qS͂wwn2lK^ͧoC<[=˵ie"2oz=ĽBXM7ퟍftfҴW,ކDqBn&k]]O.o 8ʤ$f>oy<>e6D [-|ӤoHb/ĿaxH_d,{+&$chHWјBM"UL6TMƚВ<nhCK$cU[HL"r|b=b6H7b[{q/qmQ8<B\!׿`^Gl,s|wV3 /c#Gb8պm=(ŸX‹~y5ld 6t]*$ otI tI>tѝݜ߃ RxcU>x@FO*>w£)_vz
ӥU%x2t׈{l\MGC?%"vh*n8NQjx=ovəԠߙ{< S󄻆5[$&Hhިez;g8<D98mIqQ\ɩG*^QxHd2FE?8mLщ' ;>N#e[y<3}we&l/b«ng]+VpuvOfr#ܻs2chR.QneWZ)qK9gORB<H8hK,"i ^ ޥWwp˺[qS͂wwn2lK^ͧoC<[=˵ie"2oz=ĽBXM7ퟍftfҴW,ކDqBn&k]]O.o 8ʤ$f>oy<>e6D [-|ӤoHb/ĿaxH_d,{+&$chHWјBM"UL6TMƚВ<nhCK$cU[HL"r|b=b6H7b[{q/qmQ8<B\!׿`^Gl,s|wV3 /c#Gb8պm=(ŸX‹~y5ld 6t]*$ otI tI>tѝݜ߃ RxcU>x@FO*>w£)_vz
!{ԷgJm٥K /DȑkؒbkmP۫1wAgssvCGɫL^]'uog;w *Uױg,@w{_D[&g܃&0"p'8w3'I z yͰQ #a Ok(gl@\.Mc*N7Ԃ^Dk/</- y^t,t1db|9^AA"Dl%B\BxK'FG3$PKqPK
!{ԷgJm٥K /DȑkؒbkmP۫1wAgssvCGɫL^]'uog;w *Uױg,@w{_D[&g܃&0"p'8w3'I z yͰQ #a Ok(gl@\.Mc*N7Ԃ^Dk/</- y^t,t1db|9^AA"Dl%B\BxK'FG3$PKqPK
mR9f#( <META-INF/maven/com.stream-pi/twitch-start-commercial/pom.xmlVn }WD^ 2MU个*MjV{$'.`;8<t{\D"nT\Y)+HxfO_u<*)֌)KeZWK e%"CB=0d˽ۡ2?!yR RiRRf_* J-1^% ,A<a ˟c;61TTHiHT<-l(DjJP︦Y{:IIacR-W+t jU<g)QK0`T2=Ռ,~C7W::O<IVی[QඑFyn5M g nƾk!w/ēx5l0OZ汱/p>/xyLUypqzw'dxvtwcMd^m2Z.PslG`{Fkc
mR9f#( <META-INF/maven/com.stream-pi/twitch-start-commercial/pom.xmlVn }WD^ 2MU个*MjV{$'.`;8<t{\D"nT\Y)+HxfO_u<*)֌)KeZWK e%"CB=0d˽ۡ2?!yR RiRRf_* J-1^% ,A<a ˟c;61TTHiHT<-l(DjJP︦Y{:IIacR-W+t jU<g)QK0`T2=Ռ,~C7W::O<IVی[QඑFyn5M g nƾk!w/ēx5l0OZ汱/p>/xyLUypqzw'dxvtwcMd^m2Z.PslG`{Fkc
u}G)mk7b#I T\&a?$FxH<h[aWBЉPQX~ptΌ#,|'beouoQў~?GD/#!.*򸃾C)Y?MA70L] <<\/Tv}x^:}ߞxPK9f#( PK
u}G)mk7b#I T\&a?$FxH<h[aWBЉPQX~ptΌ#,|'beouoQў~?GD/#!.*򸃾C)Y?MA70L] <<\/Tv}x^:}ߞxPK9f#( PK
'mRb:bfCMETA-INF/maven/com.stream-pi/twitch-start-commercial/pom.properties 10 @= Ė!\cK C7ox*_?H7~fruT244*@>+F)4-tYIn&0?PKb:bfPK'mR4AW_META-INF/MANIFEST.MFPK
'mRb:bfCMETA-INF/maven/com.stream-pi/twitch-start-commercial/pom.properties 10 @= Ė!\cK C7ox*_?H7~fruT244*@>+F)4-tYIn&0?PKb:bfPK'mR4AW_META-INF/MANIFEST.MFPK
'mR AMETA-INF/PK
'mR AMETA-INF/PK
'mRAstartcommercial/PK
'mRAstartcommercial/PK
'mRAMETA-INF/maven/PK
'mRAMETA-INF/maven/PK
'mRAMETA-INF/maven/com.stream-pi/PK
'mRAMETA-INF/maven/com.stream-pi/PK
'mR5AVMETA-INF/maven/com.stream-pi/twitch-start-commercial/PK'mR$?umodule-info.classPK'mRq+startcommercial/StartCommercialAction.classPKmR9f#( < META-INF/maven/com.stream-pi/twitch-start-commercial/pom.xmlPK'mRb:bfCMETA-INF/maven/com.stream-pi/twitch-start-commercial/pom.propertiesPK
'mR5AVMETA-INF/maven/com.stream-pi/twitch-start-commercial/PK'mR$?umodule-info.classPK'mRq+startcommercial/StartCommercialAction.classPKmR9f#( < META-INF/maven/com.stream-pi/twitch-start-commercial/pom.xmlPK'mRb:bfCMETA-INF/maven/com.stream-pi/twitch-start-commercial/pom.propertiesPK


PK
PK
"mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
"mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
"mR META-INF/PK
"mR META-INF/PK
"mRunhost/PK
"mRunhost/PK
"mRMETA-INF/maven/PK
"mRMETA-INF/maven/PK
"mRMETA-INF/maven/com.stream-pi/PK
"mRMETA-INF/maven/com.stream-pi/PK
"mR+META-INF/maven/com.stream-pi/twitch-unhost/PK
"mR+META-INF/maven/com.stream-pi/twitch-unhost/PK
"mR0Qmodule-info.classmNN0ZӔGyʁ#N8s\CbW^.|phĮ< v ѝK^<%
"mR0Qmodule-info.classmNN0ZӔGyʁ#N8s\CbW^.|phĮ< v ѝK^<%
T6Vș$to1 t1c=K!8`8d8"-DTnDm2[9kvGY9aJj*NYcR]7;|%yQKزyKķqC(-~cg]Om(`?AoPK0QPK
T6Vș$to1 t1c=K!8`8d8"-DTnDm2[9kvGY9aJj*NYcR]7;|%yQKزyKķqC(-~cg]Om(`?AoPK0QPK
"mRG 7 unhost/UnhostAction.classWwGVVz$8I(X%IMĭEq+)`x+vWI\
"mRG 7 unhost/UnhostAction.classWwGVVz$8I(X%IMĭEq+)`x+vWI\
-BiM -P}N9T)wwG\4Iܙ{wsgO &gAZ`R2LeO6ЏK2y:O
-BiM -P}N9T)wwG\4Iܙ{wsgO &gAZ`R2LeO6ЏK2y:O
Og`؄ jB(e ǼL] dge B(C$ZZׅ.xF2x6؏/ :aְ=O{AW]pmoPǛ;a{ad{є 5'װ\
Og`؄ jB(e ǼL] dge B(C$ZZׅ.xF2x6؏/ :aְ=O{AW]pmoPǛ;a{ad{є 5'װ\
s|!&e@ s5OiH:6OUZ *g]%Nف#35Pp50*<S=TA(n;>h8 @ 3M`23g3[,|t-RqzM5eb%Iྗ|]6R \Պ,UW^n˔/6쨸`8(v ZT/15 [7T#6nƑjQ[AM;k8&Moc̴&>aW}J0e_Njr6_]7
s|!&e@ s5OiH:6OUZ *g]%Nف#35Pp50*<S=TA(n;>h8 @ 3M`23g3[,|t-RqzM5eb%Iྗ|]6R \Պ,UW^n˔/6쨸`8(v ZT/15 [7T#6nƑjQ[AM;k8&Moc̴&>aW}J0e_Njr6_]7
M|C9q WUta*b%/6+FkvlU$1XH8^;5~Kl"0ԥtbU|[VLeb\=ߓ|/~G&^&~#&~7ti- ;-ǭ/_p2kmeK9j
M|C9q WUta*b%/6+FkvlU$1XH8^;5~Kl"0ԥtbU|[VLeb\=ߓ|/~G&^&~#&~7ti- ;-ǭ/_p2kmeK9j
,g ͂g#?[rbANJ~˭g=?z-٦Pe`1kَ7&^uS4UA҉roB=?XX.B%,ك4lZPEysh
,g ͂g#?[rbANJ~˭g=?z-٦Pe`1kَ7&^uS4UA҉roB=?XX.B%,ك4lZPEysh
)'tf׉K^U,$,I]>n=ՊwoT* h?W16b٘#0$ʣ~' I.QCe :M^L` C][nra:MȮ٫׵#?!h|pQ򜺙q8 [Z,V"uKhH [r4m>t<Se]P/v;4Ꚗ&:-tˣ*l8hM'h2TYw"_*IKϯ 9[aԝ {,7˞C=^~KV]tVozLk@tg fykĺr} 00̧VmNl'PZ߉ce&q'H5|hR1R#7iJ#֖6Gml!߹3RmU;
)'tf׉K^U,$,I]>n=ՊwoT* h?W16b٘#0$ʣ~' I.QCe :M^L` C][nra:MȮ٫׵#?!h|pQ򜺙q8 [Z,V"uKhH [r4m>t<Se]P/v;4Ꚗ&:-tˣ*l8hM'h2TYw"_*IKϯ 9[aԝ {,7˞C=^~KV]tVozLk@tg fykĺr} 00̧VmNl'PZ߉ce&q'H5|hR1R#7iJ#֖6Gml!߹3RmU;
a=y[\{IҤ9N@j *N%ҤbGy6Rm|{.0G{ {.}mP6*7[#K;1̘Wf30rʾDy_8e3@|/8(28ǹ$pu8MGμϒ'% ;ЍrƘUXvC uٍ$/s<TYɟՁ-Ձ-u_)E%s<Fj7EPKG 7 PK
a=y[\{IҤ9N@j *N%ҤbGy6Rm|{.0G{ {.}mP6*7[#K;1̘Wf30rʾDy_8e3@|/8(28ǹ$pu8MGμϒ'% ;ЍrƘUXvC uٍ$/s<TYɟՁ-Ձ-u_)E%s<Fj7EPKG 7 PK
mR'^Y 2META-INF/maven/com.stream-pi/twitch-unhost/pom.xmlV]o }ϯeqUU*J1Il'M=p.\KcY,DH&*XyJY U+f3 rKK'
mR'^Y 2META-INF/maven/com.stream-pi/twitch-unhost/pom.xmlV]o }ϯeqUU*J1Il'M=p.\KcY,DH&*XyJY U+f3 rKK'
.2x~+=b鸗GI;pe~\"N-QHTab$)[sLZqU⒧xr;OX °2k`^AeX J@Ú\z#ȜDn"NF-$b8=2ȈjF\=F> +?*ZdCä+M gL{lfYnHSĮW3XnĆ*.z;4DdKPCv#(c@S +⹦E3e\uDxvwMMgGw#H?jZt c;9\Sau
.2x~+=b鸗GI;pe~\"N-QHTab$)[sLZqU⒧xr;OX °2k`^AeX J@Ú\z#ȜDn"NF-$b8=2ȈjF\=F> +?*ZdCä+M gL{lfYnHSĮW3XnĆ*.z;4DdKPCv#(c@S +⹦E3e\uDxvwMMgGw#H?jZt c;9\Sau
*"Yׯd$Ix(#l8dr57 yUb '^{؊oNsBZ1n~{;L7GY1NIEX_uPN7ӱ4()%:>h1F/C!*rAߡҌ~?]؛~0DmPۼϟvub:?;/PK'^Y PK
*"Yׯd$Ix(#l8dr57 yUb '^{؊oNsBZ1n~{;L7GY1NIEX_uPN7ӱ4()%:>h1F/C!*rAߡҌ~?]؛~0DmPۼϟvub:?;/PK'^Y PK
!mRZ\9META-INF/maven/com.stream-pi/twitch-unhost/pom.properties 1 W8hL
!mRZ\9META-INF/maven/com.stream-pi/twitch-unhost/pom.properties 1 W8hL
@bwR_=g$zQ0Β:K*L
@bwR_=g$zQ0Β:K*L
I~'ysGƥ=PKZ\PK"mR4AW_META-INF/MANIFEST.MFPK
I~'ysGƥ=PKZ\PK"mR4AW_META-INF/MANIFEST.MFPK
"mR AMETA-INF/PK
"mR AMETA-INF/PK
"mRAunhost/PK
"mRAunhost/PK
"mRAMETA-INF/maven/PK
"mRAMETA-INF/maven/PK
"mRAMETA-INF/maven/com.stream-pi/PK
"mRAMETA-INF/maven/com.stream-pi/PK
"mR+AMMETA-INF/maven/com.stream-pi/twitch-unhost/PK"mR0Qmodule-info.classPK"mRG 7 unhost/UnhostAction.classPKmR'^Y 2 META-INF/maven/com.stream-pi/twitch-unhost/pom.xmlPK!mRZ\9 META-INF/maven/com.stream-pi/twitch-unhost/pom.propertiesPK
"mR+AMMETA-INF/maven/com.stream-pi/twitch-unhost/PK"mR0Qmodule-info.classPK"mRG 7 unhost/UnhostAction.classPKmR'^Y 2 META-INF/maven/com.stream-pi/twitch-unhost/pom.xmlPK!mRZ\9 META-INF/maven/com.stream-pi/twitch-unhost/pom.propertiesPK
X
X
PK
PK
 mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
 mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
 mR META-INF/PK
 mR META-INF/PK
 mRunraid/PK
 mRunraid/PK
 mRMETA-INF/maven/PK
 mRMETA-INF/maven/PK
 mRMETA-INF/maven/com.stream-pi/PK
 mRMETA-INF/maven/com.stream-pi/PK
 mR+META-INF/maven/com.stream-pi/twitch-unraid/PK
 mR+META-INF/maven/com.stream-pi/twitch-unraid/PK
 mR2Gmodule-info.classmNN1#!摖_!QP Aԑqb#GZ>!DbWvf v 靭TWP^iUNyY
 mR2Gmodule-info.classmNN1#!摖_!QP Aԑqb#GZ>!DbWvf v 靭TWP^iUNyY
B&R =B+C>d#$yCg`  \Җ|hk/'2N豐^[CԻaJ6jr"(;z\YelJQ4Dv=Ұoak!k\FhlL&:K#v#navPK2GPK
B&R =B+C>d#$yCg`  \Җ|hk/'2N豐^[CԻaJ6jr"(;z\YelJQ4Dv=Ұoak!k\FhlL&:K#v#navPK2GPK
 mR\ƌ unraid/UnraidAction.classWwFy<60@ bI"dcQJ ,MN85i뎥5x<Όi.I{礧{i[?wgG=r|޽˻_ ĥ &OfAZ`R2LeЏ6Џ2y6 O'a؄ jB(Wd ǼL] dd B(C$Zz7.xNǧ3x>؏
 mR\ƌ unraid/UnraidAction.classWwFy<60@ bI"dcQJ ,MN85i뎥5x<Όi.I{礧{i[?wgG=r|޽˻_ ĥ &OfAZ`R2LeЏ6Џ2y6 O'a؄ jB(Wd ǼL] dd B(C$Zz7.xNǧ3x>؏
^s:>aְ=O{A]PU]pmoPǛ;a{ad{є u'װ\
^s:>aְ=O{A]PU]pmoPǛ;a{ad{є u'װ\
s|!&e@IsG5OiH:6OUZ *g]%Nف#35PpS/<ӵ=TA(n;>h8 @ 3M`23g3[,|t-RqFM5eb%Iྗ|]6R \Պ,UW^n /6쨸`8(v ZT/15 [7T#6nƑEjQ[AM;k8&MQoc̴!0o%LLYalKxW+F]W/=&9n
s|!&e@IsG5OiH:6OUZ *g]%Nف#35PpS/<ӵ=TA(n;>h8 @ 3M`23g3[,|t-RqFM5eb%Iྗ|]6R \Պ,UW^n /6쨸`8(v ZT/15 [7T#6nƑEjQ[AM;k8&MQoc̴!0o%LLYalKxW+F]W/=&9n
B.L%TW5 Q XKQ5;*}ҊA}Nb,$V/Rs.uhRs:a6˭wĚ6z&+^5}uoM?Q?ďtOS?[vv;?gZ[WL_p4+m0ko weK9j
B.L%TW5 Q XKQ5;*}ҊA}Nb,$V/Rs.uhRs:a6˭wĚ6z&+^5}uoM?Q?ďtOS?[vv;?gZ[WL_p4+m0ko weK9j
,g mL=ٚՔ[[z~m}4tl,f9MAm[:NY~X/M QēzϒMH"z]QZ?wm֟vvs6ά:bɫ%_UQIo]>n=݊woT* lhx(W~# 6\ْ\lXouRq G'vr(ݥ2k~u¦k/&Y-7h-0NwFY?d+ܳj4{޿yN8w^六@ax:3$y^6[Y]2߮ZmtAKxEw:}^^\6]y&yœu[G`ìf ;ҍ/ 'ՇE^nm0Nц|4Knmhp<?^@yp"z/A[wѓml[m62y #鞞%m 66>Aq܂460[ ;A;h}'sX $IhBKĦi+'XK*X[mzH{V!+@48=4 NnMTwpQ<F8K;e$ߪ$Rk|:֪8ߔHV6v۸Jq__d<wMo]xփm<66UnbF0whc1;Ek=1<#f;|gaZa"}4.r<ODg:^qPcpяIK%=:6qy'OK<'v$؍1솎AI-_y橲?[[ H=SJ*x o>=PK\ƌ PK
,g mL=ٚՔ[[z~m}4tl,f9MAm[:NY~X/M QēzϒMH"z]QZ?wm֟vvs6ά:bɫ%_UQIo]>n=݊woT* lhx(W~# 6\ْ\lXouRq G'vr(ݥ2k~u¦k/&Y-7h-0NwFY?d+ܳj4{޿yN8w^六@ax:3$y^6[Y]2߮ZmtAKxEw:}^^\6]y&yœu[G`ìf ;ҍ/ 'ՇE^nm0Nц|4Knmhp<?^@yp"z/A[wѓml[m62y #鞞%m 66>Aq܂460[ ;A;h}'sX $IhBKĦi+'XK*X[mzH{V!+@48=4 NnMTwpQ<F8K;e$ߪ$Rk|:֪8ߔHV6v۸Jq__d<wMo]xփm<66UnbF0whc1;Ek=1<#f;|gaZa"}4.r<ODg:^qPcpяIK%=:6qy'OK<'v$؍1솎AI-_y橲?[[ H=SJ*x o>=PK\ƌ PK
 mR~Z\9META-INF/maven/com.stream-pi/twitch-unraid/pom.properties 1 W8hHP@j{I]_; +%`gvwKz AЇ59JrqN:PK~Z\PK
 mR~Z\9META-INF/maven/com.stream-pi/twitch-unraid/pom.properties 1 W8hHP@j{I]_; +%`gvwKz AЇ59JrqN:PK~Z\PK
mR0)v 2META-INF/maven/com.stream-pi/twitch-unraid/pom.xmlV]o }ϯeqUU*J1Il'M=p.\KcY,DH&*XyJY U+f3 rKK'
mR0)v 2META-INF/maven/com.stream-pi/twitch-unraid/pom.xmlV]o }ϯeqUU*J1Il'M=p.\KcY,DH&*XyJY U+f3 rKK'
.2x~+=b鸗GI;pe~\"N-QHTab$)[sLZqU⒧xr;OX °2k`^AeX J@Ú Dz#ȜDn"NF-$b8=2ȈjF\=F> +?*ZdCä+M gL{lfYnHSĮW3XnĆ*.z;4DdKPCv#(c@S +⹦E3e\uDxvwMMgGw#H?jZt c;9\Sau
.2x~+=b鸗GI;pe~\"N-QHTab$)[sLZqU⒧xr;OX °2k`^AeX J@Ú Dz#ȜDn"NF-$b8=2ȈjF\=F> +?*ZdCä+M gL{lfYnHSĮW3XnĆ*.z;4DdKPCv#(c@S +⹦E3e\uDxvwMMgGw#H?jZt c;9\Sau
*"Yׯd$Ix(#l8dr57 yUb '^{؊oNsBZ1n~{;L7GY1NIEX_uPN7ӱ4()%:>h1F/C!*rAߡҌ~?]؛~0DmPۼϟvub:?;/PK0)v PK mR4AW_META-INF/MANIFEST.MFPK
*"Yׯd$Ix(#l8dr57 yUb '^{؊oNsBZ1n~{;L7GY1NIEX_uPN7ӱ4()%:>h1F/C!*rAߡҌ~?]؛~0DmPۼϟvub:?;/PK0)v PK mR4AW_META-INF/MANIFEST.MFPK
 mR AMETA-INF/PK
 mR AMETA-INF/PK
 mRAunraid/PK
 mRAunraid/PK
 mRAMETA-INF/maven/PK
 mRAMETA-INF/maven/PK
 mRAMETA-INF/maven/com.stream-pi/PK
 mRAMETA-INF/maven/com.stream-pi/PK
 mR+AMMETA-INF/maven/com.stream-pi/twitch-unraid/PK mR2Gmodule-info.classPK mR\ƌ unraid/UnraidAction.classPK mR~Z\9 META-INF/maven/com.stream-pi/twitch-unraid/pom.propertiesPKmR0)v 2e
 mR+AMMETA-INF/maven/com.stream-pi/twitch-unraid/PK mR2Gmodule-info.classPK mR\ƌ unraid/UnraidAction.classPK mR~Z\9 META-INF/maven/com.stream-pi/twitch-unraid/pom.propertiesPKmR0)v 2e
META-INF/maven/com.stream-pi/twitch-unraid/pom.xmlPK
META-INF/maven/com.stream-pi/twitch-unraid/pom.xmlPK
T
T
PK
PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
mR META-INF/PK
mR META-INF/PK
mRwhisper/PK
mRwhisper/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/PK
mRMETA-INF/maven/com.stream-pi/PK
mRMETA-INF/maven/com.stream-pi/PK
mR,META-INF/maven/com.stream-pi/twitch-whisper/PK
mR,META-INF/maven/com.stream-pi/twitch-whisper/PK
mR module-info.classmNN0ДG)AH=s8VŐQ4WG:IKZ<3`C`\+ 1/e.tj BN'|pDaFN<\g$,VʈW.2 iI :?-1VDŽ&f"ӄd$4i]eucw¥`&OD}3\/F˭@XՖ;5nc+tvz.z7op"{PK PK
mR module-info.classmNN0ДG)AH=s8VŐQ4WG:IKZ<3`C`\+ 1/e.tj BN'|pDaFN<\g$,VʈW.2 iI :?-1VDŽ&f"ӄd$4i]eucw¥`&OD}3\/F˭@XՖ;5nc+tvz.z7op"{PK PK
mRwHwhisper/WhisperAction.classW=#y<6fY]" $[ P SC[:y:38M6-I}/].Tf+/@~c7λs}w(>Lzq9+pQ4h$fE_QQC %Q S|jhXHE$$. c.
mRwHwhisper/WhisperAction.classW=#y<6fY]" $[ P SC[:y:38M6-I}/].Tf+/@~c7λs}w(>Lzq9+pQ4h$fE_QQC %Q S|jhXHE$$. c.
n`IyA'E|R~|J4/ XV,'$(K
n`IyA'E|R~|J4/ XV,'$(K
e9"~%&5_ % Zq^-ݮKk
e9"~%&5_ % Zq^-ݮKk
OVÐ,WC6tkBjj@-GLO(8R4mc0kSeNYuHLOŽ"/o:6w 㓮CoB 'Xպūk=]ʯD֖h3bR(uD?p _ Y 1ㆄu\fˮQ1l-O7_š4Fmp yaҠ˜)b6)4J0$ژ^b,Uq\?,Rrn8gYaG\W8W)zG
OVÐ,WC6tkBjj@-GLO(8R4mc0kSeNYuHLOŽ"/o:6w 㓮CoB 'Xպūk=]ʯD֖h3bR(uD?p _ Y 1ㆄu\fˮQ1l-O7_š4Fmp yaҠ˜)b6)4J0$ژ^b,Uq\?,Rrn8gYaG\W8W)zG
#9RW^N<%&^W-|k5ݲ|WsM+p="O]%w<*kC&00a޽~eHtȴ}~`eO9QUTg<FS/KRkFM<߫OxCžVtô*"o nx Qq'd6*qGBor0" gKäNa9SIN!cQ3\aURo072+Ru=K)5\*w;*6Z32\ס筓;3m;Jǃʊ?qpse=h_޽WlQYѴ陳eKvp"Js7bL_z Q!T~t$ VA<kXu<ژZX{i3>,,pG+C ר/YЄ7 A
#9RW^N<%&^W-|k5ݲ|WsM+p="O]%w<*kC&00a޽~eHtȴ}~`eO9QUTg<FS/KRkFM<߫OxCžVtô*"o nx Qq'd6*qGBor0" gKäNa9SIN!cQ3\aURo072+Ru=K)5\*w;*6Z32\ס筓;3m;Jǃʊ?qpse=h_޽WlQYѴ陳eKvp"Js7bL_z Q!T~t$ VA<kXu<ژZX{i3>,,pG+C ר/YЄ7 A
i%^RNϼ?yNFx"䪱QDÝ5\cpg{q
i%^RNϼ?yNFx"䪱QDÝ5\cpg{q
G %mk;DE|PtF-.E7><]8йئuUއDTA۬ص%"NIT]29~Ms~k
G %mk;DE|PtF-.E7><]8йئuUއDTA۬ص%"NIT]29~Ms~k
W-TL/‚}U:+o ` p㣉;8$Q+ۧ8z|F2ː2Z6-qm 9%ěP2Zgj.f2ؒzz+pm
W-TL/‚}U:+o ` p㣉;8$Q+ۧ8z|F2ː2Z6-qm 9%ěP2Zgj.f2ؒzz+pm
>z·>@?v. b7!~<͙jpq\og]h3Z-l[/mobGVĮ,A&¯c9m~~͉{<[IJMo3}?bOh!K#$, L38KY[ P$] h:uz+&$ v{&4bMkb`,$8&9{t51xH7qsCMdn"u<qmHf3c4T/"',y k S18<RfD)~Q$" TI4.rFqoq8cbɄ^c2IFC_ A!1C7S ~@;MF7r͔(ez^\
>z·>@?v. b7!~<͙jpq\og]h3Z-l[/mobGVĮ,A&¯c9m~~͉{<[IJMo3}?bOh!K#$, L38KY[ P$] h:uz+&$ v{&4bMkb`,$8&9{t51xH7qsCMdn"u<qmHf3c4T/"',y k S18<RfD)~Q$" TI4.rFqoq8cbɄ^c2IFC_ A!1C7S ~@;MF7r͔(ez^\
8lpz$ Pʈ] &u \_I$1PKwHPK
8lpz$ Pʈ] &u \_I$1PKwHPK
mR!Lϐ 3META-INF/maven/com.stream-pi/twitch-whisper/pom.xmlV]o }ϯeqUU*J1IlǙM=p.\Kc/DHvjI ev%X]ŋ|GZj6UTy aT"E
mR!Lϐ 3META-INF/maven/com.stream-pi/twitch-whisper/pom.xmlV]o }ϯeqUU*J1IlǙM=p.\Kc/DHvjI ev%X]ŋ|GZj6UTy aT"E
O`gY,(iǯ^Z2Iz)-|1R .G80<UW
O`gY,(iǯ^Z2Iz)-|1R .G80<UW
<c` JʯIyAI#†/+*uFeID!ltC_H+S%PM}v'zݒD+IRHDMe5#.^c#uIΎg2a҃&C3M63,MC)bkl"
<c` JʯIyAI#†/+*uFeID!ltC_H+S%PM}v'zݒD+IRHDMe5#.^c#uIΎg2a҃&C3M63,MC)bkl"
7bC_mRrIIJ{k( MJq)w|^\Ѽ2**՗[mS{;&s&dz;${h- )d:,n2CF<}H6RRr9ԛ؆<*1Ez`=l^sOS'9{i%X~EM7hO&#,|'$,OG:@X}~O?#a"!dhg9PiJUV=@rfnxqo6/(m^_Tv}xA:}̿xPK!Lϐ PK
7bC_mRrIIJ{k( MJq)w|^\Ѽ2**՗[mS{;&s&dz;${h- )d:,n2CF<}H6RRr9ԛ؆<*1Ez`=l^sOS'9{i%X~EM7hO&#,|'$,OG:@X}~O?#a"!dhg9PiJUV=@rfnxqo6/(m^_Tv}xA:}̿xPK!Lϐ PK
mR>RZ]:META-INF/maven/com.stream-pi/twitch-whisper/pom.properties 1 W8`LXBJ{Yv}vJ ݶzsJ|Ҳ>^֫MlPZA_V7pN$d؁g~PK>RZ]PKmR4AW_META-INF/MANIFEST.MFPK
mR>RZ]:META-INF/maven/com.stream-pi/twitch-whisper/pom.properties 1 W8`LXBJ{Yv}vJ ݶzsJ|Ҳ>^֫MlPZA_V7pN$d؁g~PK>RZ]PKmR4AW_META-INF/MANIFEST.MFPK
mR AMETA-INF/PK
mR AMETA-INF/PK
mRAwhisper/PK
mRAwhisper/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/PK
mRAMETA-INF/maven/com.stream-pi/PK
mRAMETA-INF/maven/com.stream-pi/PK
mR,ANMETA-INF/maven/com.stream-pi/twitch-whisper/PKmR module-info.classPKmRwHwhisper/WhisperAction.classPKmR!Lϐ 3=
mR,ANMETA-INF/maven/com.stream-pi/twitch-whisper/PKmR module-info.classPKmRwHwhisper/WhisperAction.classPKmR!Lϐ 3=
META-INF/maven/com.stream-pi/twitch-whisper/pom.xmlPKmR>RZ]:. META-INF/maven/com.stream-pi/twitch-whisper/pom.propertiesPK
META-INF/maven/com.stream-pi/twitch-whisper/pom.xmlPKmR>RZ]:. META-INF/maven/com.stream-pi/twitch-whisper/pom.propertiesPK


<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-add-stream-marker</artifactId>
<artifactId>twitch-add-stream-marker</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
package addstreammarker;
package addstreammarker;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class AddStreamMarkerAction extends NormalAction
public class AddStreamMarkerAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_asm";
private final String channelNameKey = "channel_name_asm";
private final String descriptionKey = "description_asm";
private final String descriptionKey = "description_asm";
private Twirk twirk;
private Twirk twirk;
public AddStreamMarkerAction()
public AddStreamMarkerAction()
{
{
setName("Add stream marker");
setName("Add stream marker");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channelName = new Property(channelNameKey, Type.STRING);
Property channelName = new Property(channelNameKey, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
channelName.setCanBeBlank(false);
Property description = new Property(descriptionKey, Type.STRING);
Property description = new Property(descriptionKey, Type.STRING);
description.setDisplayName("Description (Optional, max 140 chars)");
description.setDisplayName("Description (Optional, max 140 chars)");
addClientProperties(channelName, description);
addClientProperties(channelName, description);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String description = getClientProperties().getSingleProperty(descriptionKey).getStringValue();
final String description = getClientProperties().getSingleProperty(descriptionKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
if (description != null && !description.isEmpty()) {
if (description != null && !description.isEmpty()) {
twirk.channelMessage(String.format("/marker %s", description));
twirk.channelMessage(String.format("/marker %s", description));
} else {
} else {
twirk.channelMessage("/marker");
twirk.channelMessage("/marker");
}
}
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to add marker to stream", "Could not add stream marker, please try again."
"Failed to add marker to stream", "Could not add stream marker, please try again."
);
);
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
module com.stream_pi.twitch.addstreammarkeraction {
module com.stream_pi.twitch.addstreammarkeraction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with addstreammarker.AddStreamMarkerAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with addstreammarker.AddStreamMarkerAction;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-clear-chat</artifactId>
<artifactId>twitch-clear-chat</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
package clearchat;
package clearchat;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class ClearChatAction extends NormalAction
public class ClearChatAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_cc";
private final String channelNameKey = "channel_name_cc";
private Twirk twirk;
private Twirk twirk;
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
setName("Clear Chat");
setName("Clear Chat");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
Property channelName = new Property(channelNameKey, Type.STRING);
Property channelName = new Property(channelNameKey, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
channelName.setCanBeBlank(false);
addClientProperties(channelName);
addClientProperties(channelName);
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage("/clear");
twirk.channelMessage("/clear");
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to clear channel chat",
"Failed to clear channel chat",
String.format("Could not clear chat for '%s' channel, please try again.", channel)
String.format("Could not clear chat for '%s' channel, please try again.", channel)
);
);
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null)
{
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex)
{
throw new StreamPiException("Twitch Connection error", "Please try again.");
throw new StreamPiException("Twitch Connection error", "Please try again.");
}
}
}
}
}
}
}
}
module com.stream_pi.twitch.clearchataction {
module com.stream_pi.twitch.clearchataction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with clearchat.ClearChatAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with clearchat.ClearChatAction;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-host-channel</artifactId>
<artifactId>twitch-host-channel</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
package hostchannel;
package hostchannel;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class HostChannelAction extends NormalAction
public class HostChannelAction extends NormalAction
{
{
private final String channelKey = "channel_hc";
private final String channelKey = "channel_hc";
private final String channelToHostKey = "channel_to_host_hc";
private final String channelToHostKey = "channel_to_host_hc";
private Twirk twirk;
private Twirk twirk;
public HostChannelAction()
public HostChannelAction()
{
{
setName("Host Channel");
setName("Host Channel");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channel = new Property(channelKey, Type.STRING);
Property channel = new Property(channelKey, Type.STRING);
channel.setDisplayName("Channel");
channel.setDisplayName("Channel");
channel.setDefaultValueStr("channel");
channel.setDefaultValueStr("channel");
channel.setCanBeBlank(false);
channel.setCanBeBlank(false);
Property channelToHost = new Property(channelToHostKey, Type.STRING);
Property channelToHost = new Property(channelToHostKey, Type.STRING);
channelToHost.setDisplayName("Channel to host");
channelToHost.setDisplayName("Channel to host");
channelToHost.setDefaultValueStr("channel_to_host");
channelToHost.setDefaultValueStr("channel_to_host");
channelToHost.setCanBeBlank(false);
channelToHost.setCanBeBlank(false);
addClientProperties(channel, channelToHost);
addClientProperties(channel, channelToHost);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelKey).getStringValue();
final String channelToHost = getClientProperties().getSingleProperty(channelToHostKey).getStringValue();
final String channelToHost = getClientProperties().getSingleProperty(channelToHostKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage(String.format("/host %s", channelToHost));
twirk.channelMessage(String.format("/host %s", channelToHost));
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to host channel",
"Failed to host channel",
String.format("Could not host channel '%s', please try again.", channelToHost));
String.format("Could not host channel '%s', please try again.", channelToHost));
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
module com.stream_pi.twitch.hostchannelaction {
module com.stream_pi.twitch.hostchannelaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with hostchannel.HostChannelAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with hostchannel.HostChannelAction;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-raid-channel</artifactId>
<artifactId>twitch-raid-channel</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.raidchannelaction {
module com.stream_pi.twitch.raidchannelaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with raidchannel.RaidChannelAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with raidchannel.RaidChannelAction;
}
}
package raidchannel;
package raidchannel;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class RaidChannelAction extends NormalAction
public class RaidChannelAction extends NormalAction
{
{
private final String channelKey = "channel_rc";
private final String channelKey = "channel_rc";
private final String channelToRaidKey = "channel_to_raid_rc";
private final String channelToRaidKey = "channel_to_raid_rc";
private Twirk twirk;
private Twirk twirk;
public RaidChannelAction()
public RaidChannelAction()
{
{
setName("Raid Channel");
setName("Raid Channel");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channel = new Property(channelKey, Type.STRING);
Property channel = new Property(channelKey, Type.STRING);
channel.setDisplayName("Channel");
channel.setDisplayName("Channel");
channel.setDefaultValueStr("channel");
channel.setDefaultValueStr("channel");
channel.setCanBeBlank(false);
channel.setCanBeBlank(false);
Property channelToRaid = new Property(channelToRaidKey, Type.STRING);
Property channelToRaid = new Property(channelToRaidKey, Type.STRING);
channelToRaid.setDisplayName("Channel to raid");
channelToRaid.setDisplayName("Channel to raid");
channelToRaid.setDefaultValueStr("channel_to_raid");
channelToRaid.setDefaultValueStr("channel_to_raid");
channelToRaid.setCanBeBlank(false);
channelToRaid.setCanBeBlank(false);
addClientProperties(channel, channelToRaid);
addClientProperties(channel, channelToRaid);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelKey).getStringValue();
final String channelToRaid = getClientProperties().getSingleProperty(channelToRaidKey).getStringValue();
final String channelToRaid = getClientProperties().getSingleProperty(channelToRaidKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage(String.format("/raid %s", channelToRaid));
twirk.channelMessage(String.format("/raid %s", channelToRaid));
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to raid channel",
"Failed to raid channel",
String.format("Could not raid channel '%s', please try again.", channelToRaid));
String.format("Could not raid channel '%s', please try again.", channelToRaid));
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-send-channel-msg</artifactId>
<artifactId>twitch-send-channel-msg</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.sendchannelmsgaction {
module com.stream_pi.twitch.sendchannelmsgaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with sendchannelmsg.SendChannelMessageAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with sendchannelmsg.SendChannelMessageAction;
}
}
package sendchannelmsg;
package sendchannelmsg;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class SendChannelMessageAction extends NormalAction
public class SendChannelMessageAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_scm";
private final String channelNameKey = "channel_name_scm";
private final String channelMsgKey = "channel_msg_scm";
private final String channelMsgKey = "channel_msg_scm";
private Twirk twirk;
private Twirk twirk;
public SendChannelMessageAction()
public SendChannelMessageAction()
{
{
setName("Send Channel Message");
setName("Send Channel Message");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channelName = new Property(channelNameKey, Type.STRING);
Property channelName = new Property(channelNameKey, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
channelName.setCanBeBlank(false);
Property channelMessage = new Property(channelMsgKey, Type.STRING);
Property channelMessage = new Property(channelMsgKey, Type.STRING);
channelMessage.setDisplayName("Message");
channelMessage.setDisplayName("Message");
channelMessage.setDefaultValueStr("channel_msg");
channelMessage.setDefaultValueStr("channel_msg");
channelMessage.setCanBeBlank(false);
channelMessage.setCanBeBlank(false);
addClientProperties(channelName, channelMessage);
addClientProperties(channelName, channelMessage);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String message = getClientProperties().getSingleProperty(channelMsgKey).getStringValue();
final String message = getClientProperties().getSingleProperty(channelMsgKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage(message);
twirk.channelMessage(message);
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to send channel message",
"Failed to send channel message",
String.format("Could not send message '%s' to '%s' channel, please try again.",
String.format("Could not send message '%s' to '%s' channel, please try again.",
channel, message)
channel, message)
);
);
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-set-color</artifactId>
<artifactId>twitch-set-color</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.setcoloraction {
module com.stream_pi.twitch.setcoloraction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with setcolor.SetColorAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with setcolor.SetColorAction;
}
}
package setcolor;
package setcolor;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class SetColorAction extends NormalAction
public class SetColorAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_sc";
private final String channelNameKey = "channel_name_sc";
private final String usernameColorKey = "username_color_sc";
private final String usernameColorKey = "username_color_sc";
private Twirk twirk;
private Twirk twirk;
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
setName("Set Color");
setName("Set Color");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
Property channelName = new Property(channelNameKey, Type.STRING);
Property channelName = new Property(channelNameKey, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
channelName.setCanBeBlank(false);
Property usernameColor = new Property(usernameColorKey, Type.STRING);
Property usernameColor = new Property(usernameColorKey, Type.STRING);
usernameColor.setDisplayName("Color");
usernameColor.setDisplayName("Color");
usernameColor.setDefaultValueStr("color");
usernameColor.setDefaultValueStr("color");
usernameColor.setCanBeBlank(false);
usernameColor.setCanBeBlank(false);
addClientProperties(channelName, usernameColor);
addClientProperties(channelName, usernameColor);
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String color = getClientProperties().getSingleProperty(usernameColorKey).getStringValue();
final String color = getClientProperties().getSingleProperty(usernameColorKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage(String.format("/color %s", color));
twirk.channelMessage(String.format("/color %s", color));
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to change username color",
"Failed to change username color",
String.format("Could not change username color to '%s' for '%s' channel, please try again.",
String.format("Could not change username color to '%s' for '%s' channel, please try again.",
color, channel)
color, channel)
);
);
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-start-commercial</artifactId>
<artifactId>twitch-start-commercial</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.startcommercialaction {
module com.stream_pi.twitch.startcommercialaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with startcommercial.StartCommercialAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with startcommercial.StartCommercialAction;
}
}
package startcommercial;
package startcommercial;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
import java.util.List;
import java.util.List;
public class StartCommercialAction extends NormalAction
public class StartCommercialAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_sca";
private final String channelNameKey = "channel_name_sca";
private final String durationKey = "duration_sca";
private final String durationKey = "duration_sca";
private Twirk twirk;
private Twirk twirk;
public StartCommercialAction()
public StartCommercialAction()
{
{
setName("Start commercial");
setName("Start commercial");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channelName = new Property(channelNameKey, Type.STRING);
Property channelName = new Property(channelNameKey, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
channelName.setCanBeBlank(false);
Property duration = new Property(durationKey, Type.LIST);
Property duration = new Property(durationKey, Type.LIST);
duration.setDisplayName("Duration");
duration.setDisplayName("Duration");
duration.setListValue(List.of(
duration.setListValue(List.of(
String.valueOf(30),
String.valueOf(30),
String.valueOf(60),
String.valueOf(60),
String.valueOf(90),
String.valueOf(90),
String.valueOf(120),
String.valueOf(120),
String.valueOf(150),
String.valueOf(150),
String.valueOf(180)));
String.valueOf(180)));
addClientProperties(channelName, duration);
addClientProperties(channelName, duration);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String duration = getClientProperties().getSingleProperty(durationKey).getStringValue();
final String duration = getClientProperties().getSingleProperty(durationKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage(String.format("/commercial %s", duration));
twirk.channelMessage(String.format("/commercial %s", duration));
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to start commercial", "Could not start commercial, please try again.");
"Failed to start commercial", "Could not start commercial, please try again.");
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
package connect;
package connect;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlertType;
import com.stream_pi.util.alert.StreamPiAlertType;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
import javafx.scene.control.Button;
import javafx.scene.control.Button;
public class TwitchChatConnectAction extends NormalAction
public class TwitchChatConnectAction extends NormalAction
{
{
private static final String ACCESS_TOKEN_KEY = "twitch_chat_access_token";
private static final String ACCESS_TOKEN_KEY = "twitch_chat_access_token";
private static final String NICKNAME_KEY = "twitch_chat_nickname";
private static final String NICKNAME_KEY = "twitch_chat_nickname";
private final Button clearCredentialsBtn;
private final Button clearCredentialsBtn;
public TwitchChatConnectAction()
public TwitchChatConnectAction()
{
{
setName("Twitch Chat Plugin");
setName("Twitch Chat Plugin");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInPluginsPane(false);
setVisibilityInPluginsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
clearCredentialsBtn = new Button("Clear Twitch chat credentials");
clearCredentialsBtn = new Button("Clear Twitch chat credentials");
onClearCredentials();
onClearCredentials();
setButtonBar(clearCredentialsBtn);
setServerSettingsButtonBar(clearCredentialsBtn);
}
}
@Override
@Override
public void initProperties()
public void initProperties()
{
{
Property twitchNicknameProp = new Property(NICKNAME_KEY, Type.STRING);
Property twitchNicknameProp = new Property(NICKNAME_KEY, Type.STRING);
twitchNicknameProp.setDisplayName("Twitch Username");
twitchNicknameProp.setDisplayName("Twitch Username");
Property twitchAccessTokenProp = new Property(ACCESS_TOKEN_KEY, Type.STRING);
Property twitchAccessTokenProp = new Property(ACCESS_TOKEN_KEY, Type.STRING);
twitchAccessTokenProp.setDisplayName("Access Token");
twitchAccessTokenProp.setDisplayName("Access Token");
addServerProperties(twitchNicknameProp, twitchAccessTokenProp);
addServerProperties(twitchNicknameProp, twitchAccessTokenProp);
}
}
@Override
@Override
public void initAction() throws MinorException
public void initAction() throws MinorException
{
{
clearCredentialsBtn.setDisable(isEmptyCredentials());
clearCredentialsBtn.setDisable(isEmptyCredentials());
TwitchChatCredentials.setCredentials(
TwitchChatCredentials.setCredentials(
new TwitchChatCredentials.ChatCredentials()
new TwitchChatCredentials.ChatCredentials()
.setOauthToken(getServerProperties().getSingleProperty(ACCESS_TOKEN_KEY).getStringValue())
.setOauthToken(getServerProperties().getSingleProperty(ACCESS_TOKEN_KEY).getStringValue())
.setNickname(getServerProperties().getSingleProperty(NICKNAME_KEY).getStringValue()));
.setNickname(getServerProperties().getSingleProperty(NICKNAME_KEY).getStringValue()));
}
}
private boolean isEmptyCredentials() throws MinorException {
private boolean isEmptyCredentials() throws MinorException {
final String twitchNickname = getServerProperties().getSingleProperty(NICKNAME_KEY).getStringValue();
final String twitchNickname = getServerProperties().getSingleProperty(NICKNAME_KEY).getStringValue();
final String twitchChatOauthToken = getServerProperties().getSingleProperty(ACCESS_TOKEN_KEY).getStringValue();
final String twitchChatOauthToken = getServerProperties().getSingleProperty(ACCESS_TOKEN_KEY).getStringValue();
return (twitchNickname == null || twitchNickname.isEmpty()) &&
return (twitchNickname == null || twitchNickname.isEmpty()) &&
(twitchChatOauthToken == null || twitchChatOauthToken.isEmpty());
(twitchChatOauthToken == null || twitchChatOauthToken.isEmpty());
}
}
private void onClearCredentials()
private void onClearCredentials()
{
{
clearCredentialsBtn.setOnAction(action ->
clearCredentialsBtn.setOnAction(action ->
{
{
try
try
{
{
getServerProperties().getSingleProperty(ACCESS_TOKEN_KEY).setStringValue("");
getServerProperties().getSingleProperty(ACCESS_TOKEN_KEY).setStringValue("");
getServerProperties().getSingleProperty(NICKNAME_KEY).setStringValue("");
getServerProperties().getSingleProperty(NICKNAME_KEY).setStringValue("");
saveServerProperties();
saveServerProperties();
new StreamPiAlert(
new StreamPiAlert(
"Twitch chat credentials cleared",
"Twitch chat credentials cleared",
"To revoke token access, disconnect \"Twitch Chat OAuth Token Generator\" from your Twitch settings (https://www.twitch.tv/settings/connections).",
"To revoke token access, disconnect \"Twitch Chat OAuth Token Generator\" from your Twitch settings (https://www.twitch.tv/settings/connections).",
StreamPiAlertType.INFORMATION)
StreamPiAlertType.INFORMATION)
.show();
.show();
} catch (Exception e)
} catch (Exception e)
{
{
new StreamPiAlert(
new StreamPiAlert(
"Failed to save chat credentials",
"Failed to save chat credentials",
"An error has occurred while clearing chat credentials, please try again.",
"An error has occurred while clearing chat credentials, please try again.",
StreamPiAlertType.WARNING)
StreamPiAlertType.WARNING)
.show();
.show();
}
}
});
});
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
}
}
}
}
module com.stream_pi.twitchchatconnectaction {
module com.stream_pi.twitchchatconnectaction {
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.util;
requires com.stream_pi.util;
requires Java.Twirk;
requires Java.Twirk;
exports connect.chat;
exports connect.chat;
provides com.stream_pi.action_api.normalaction.NormalAction with connect.TwitchChatConnectAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with connect.TwitchChatConnectAction;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-unhost</artifactId>
<artifactId>twitch-unhost</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.unhostaction {
module com.stream_pi.twitch.unhostaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with unhost.UnhostAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with unhost.UnhostAction;
}
}
package unhost;
package unhost;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class UnhostAction extends NormalAction
public class UnhostAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_uh";
private final String channelNameKey = "channel_name_uh";
private Twirk twirk;
private Twirk twirk;
public UnhostAction()
public UnhostAction()
{
{
setName("Unhost");
setName("Unhost");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channel = new Property(channelNameKey, Type.STRING);
Property channel = new Property(channelNameKey, Type.STRING);
channel.setDisplayName("Channel");
channel.setDisplayName("Channel");
channel.setDefaultValueStr("channel_name");
channel.setDefaultValueStr("channel_name");
channel.setCanBeBlank(false);
channel.setCanBeBlank(false);
addClientProperties(channel);
addClientProperties(channel);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage("/unhost");
twirk.channelMessage("/unhost");
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to cancel channel hosting",
"Failed to cancel channel hosting",
"Could not cancel channel hosting, please try again.");
"Could not cancel channel hosting, please try again.");
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-unraid</artifactId>
<artifactId>twitch-unraid</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.unraidaction {
module com.stream_pi.twitch.unraidaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with unraid.UnraidAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with unraid.UnraidAction;
}
}
package unraid;
package unraid;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class UnraidAction extends NormalAction
public class UnraidAction extends NormalAction
{
{
private final String channelNameKey = "channel_name_ur";
private final String channelNameKey = "channel_name_ur";
private Twirk twirk;
private Twirk twirk;
public UnraidAction()
public UnraidAction()
{
{
setName("Unraid");
setName("Unraid");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property channel = new Property(channelNameKey, Type.STRING);
Property channel = new Property(channelNameKey, Type.STRING);
channel.setDisplayName("Channel");
channel.setDisplayName("Channel");
channel.setDefaultValueStr("channel_name");
channel.setDefaultValueStr("channel_name");
channel.setCanBeBlank(false);
channel.setCanBeBlank(false);
addClientProperties(channel);
addClientProperties(channel);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.channelMessage("/unraid");
twirk.channelMessage("/unraid");
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to cancel channel raid",
"Failed to cancel channel raid",
"Could not cancel channel raid, please try again.");
"Could not cancel channel raid, please try again.");
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-whisper</artifactId>
<artifactId>twitch-whisper</artifactId>
<version>1.0.0</version>
<version>1.0.0</version>
<properties>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiActionApiVersion>1.0.0-SNAPSHOT</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiUtilVersion>1.0.0-SNAPSHOT</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
</properties>
<repositories>
<repositories>
<repository>
<repository>
<id>jitpack.io</id>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<url>https://jitpack.io</url>
</repository>
</repository>
</repositories>
</repositories>
<build>
<build>
<plugins>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<version>3.1.0</version>
<executions>
<executions>
<execution>
<execution>
<id>test-jar</id>
<id>test-jar</id>
<phase>package</phase>
<phase>package</phase>
<goals>
<goals>
<goal>test-jar</goal>
<goal>test-jar</goal>
</goals>
</goals>
</execution>
</execution>
</executions>
</executions>
</plugin>
</plugin>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<version>3.8.1</version>
<configuration>
<configuration>
<release>11</release>
<release>11</release>
</configuration>
</configuration>
</plugin>
</plugin>
</plugins>
</plugins>
</build>
</build>
<dependencies>
<dependencies>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
<version>${streamPiUtilVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
<version>${streamPiActionApiVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
<version>${javaTwirkVersion}</version>
</dependency>
</dependency>
<dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
module com.stream_pi.twitch.whisperaction {
module com.stream_pi.twitch.whisperaction {
requires com.stream_pi.util;
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with whisper.WhisperAction;
provides com.stream_pi.action_api.externalplugin.ExternalPlugin with whisper.WhisperAction;
}
}
package whisper;
package whisper;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.action_api.externalplugin.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import connect.chat.TwitchChatCredentials;
public class WhisperAction extends NormalAction
public class WhisperAction extends NormalAction
{
{
private final String usernameKey = "username_wa";
private final String usernameKey = "username_wa";
private final String messageKey = "message_wa";
private final String messageKey = "message_wa";
private Twirk twirk;
private Twirk twirk;
public WhisperAction()
public WhisperAction()
{
{
setName("Whisper");
setName("Whisper");
setCategory("Twitch Chat");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
}
@Override
@Override
public void initProperties() throws Exception
public void initProperties() throws Exception
{
{
Property usernameProp = new Property(usernameKey, Type.STRING);
Property usernameProp = new Property(usernameKey, Type.STRING);
usernameProp.setDisplayName("Twitch Username");
usernameProp.setDisplayName("Twitch Username");
usernameProp.setDefaultValueStr("username");
usernameProp.setDefaultValueStr("username");
usernameProp.setCanBeBlank(false);
usernameProp.setCanBeBlank(false);
Property messageProp = new Property(messageKey, Type.STRING);
Property messageProp = new Property(messageKey, Type.STRING);
messageProp.setDisplayName("Message");
messageProp.setDisplayName("Message");
messageProp.setDefaultValueStr("message");
messageProp.setDefaultValueStr("message");
messageProp.setCanBeBlank(false);
messageProp.setCanBeBlank(false);
addClientProperties(usernameProp, messageProp);
addClientProperties(usernameProp, messageProp);
}
}
@Override
@Override
public void initAction() throws Exception
public void initAction() throws Exception
{
{
}
}
@Override
@Override
public void onActionClicked() throws Exception
public void onActionClicked() throws Exception
{
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
credentials.ensureCredentialsInitialized();
final String username = getClientProperties().getSingleProperty(usernameKey).getStringValue();
final String username = getClientProperties().getSingleProperty(usernameKey).getStringValue();
final String message = getClientProperties().getSingleProperty(messageKey).getStringValue();
final String message = getClientProperties().getSingleProperty(messageKey).getStringValue();
try
try
{
{
twirk = new TwirkBuilder(username, credentials.getNickname(), credentials.getOauthToken()).build();
twirk = new TwirkBuilder(username, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.connect();
twirk.whisper(username, message);
twirk.whisper(username, message);
} catch (Exception ex)
} catch (Exception ex)
{
{
throw new StreamPiException(
throw new StreamPiException(
"Failed to send message to user",
"Failed to send message to user",
String.format("Could not send message '%s' to user '%s', please try again.",
String.format("Could not send message '%s' to user '%s', please try again.",
username, message)
username, message)
);
);
}
}
}
}
@Override
@Override
public void onShutDown() throws Exception
public void onShutDown() throws Exception
{
{
if (twirk != null) {
if (twirk != null) {
try
try
{
{
twirk.disconnect();
twirk.disconnect();
} catch (Exception ex) {
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
}
}