essential-actions

Clone or download

Implement set username color action

Modified Files

PK
PK
n{gR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
n{gR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
n{gR META-INF/PK
n{gR META-INF/PK
n{gRconnect/PK
n{gRconnect/PK
n{gR connect/chat/PK
n{gR connect/chat/PK
n{gRMETA-INF/maven/PK
n{gRMETA-INF/maven/PK
n{gRMETA-INF/maven/com.stream-pi/PK
n{gRMETA-INF/maven/com.stream-pi/PK
n{gR1META-INF/maven/com.stream-pi/twitch-chat-connect/PK
n{gR1META-INF/maven/com.stream-pi/twitch-chat-connect/PK
n{gRn]?module-info.classUOMO1}
n{gRn]?module-info.classUOMO1}
,*7Oij!`Zkd2vM3޼~|~ !B[iB7we/}qUKB>bt T 0!J<#8ISB
,*7Oij!`Zkd2vM3޼~|~ !B[iB7we/}qUKB>bt T 0!J<#8ISB
\\}e>ƫJZyqЪ'9gMN ș!6Jo2]/LF[
\\}e>ƫJZyqЪ'9gMN ș!6Jo2]/LF[
'%5!J+rՍ!7K3g+q;bQݩaxWq;|_yĨ]Blq%9PKn]?PK
'%5!J+rՍ!7K3g+q;bQݩaxWq;|_yĨ]Blq%9PKn]?PK
n{gRVԱ%connect/TwitchChatConnectAction.classW [=#cy 8x#KdlA 44FcČ:3%ަK/ޤDviM'f$!`7w˻zWo8q0F.MG#@Ju炨Ƙ02AbsS,Z⑕zvN5\؀BAzxIYAxL-b;ڻA<q
n{gRVԱ%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
n{gRyg$(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
n{gRyg$(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
n{gRL@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
n{gRL@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
I cR^q8META-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlU]o }ϯeˤMVimWMb pie{\pA7\כ(hIk3VK|ݤ D-5P{Z`RPEO`wY, tkZ%NpjpM͓ZZlc\cd򀎣TWAhN5laXm5K T*nl(X(ҡ"EL
I cR^q8META-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlU]o }ϯeˤMVimWMb pie{\pA7\כ(hIk3VK|ݤ D-5P{Z`RPEO`wY, tkZ%NpjpM͓ZZlc\cd򀎣TWAhN5laXm5K T*nl(X(ҡ"EL
bZKniJjZj:jVR$oi 82ȩW\;%Fۆ=]ӟ+dK.icb7+<:З6\2Q ,2=#2oej#y|ݖ0ӋF^[VlsmD{hwFugs<93oj>c$F=PҚGЇ}iTp;d%Mx8lRrKb=ml0$"8Ӥ2t\dFxcy+T~E&GY7hCL#s0gh_nWD!_o!ω2JEmΏi1;͌6ƆvQN؍3;f͟}PK^qPK
bZKniJjZj:jVR$oi 82ȩW\;%Fۆ=]ӟ+dK.icb7+<:З6\2Q ,2=#2oej#y|ݖ0ӋF^[VlsmD{hwFugs<93oj>c$F=PҚGЇ}iTp;d%Mx8lRrKb=ml0$"8Ӥ2t\dFxcy+T~E&GY7hCL#s0gh_nWD!_o!ω2JEmΏi1;͌6ƆvQN؍3;f͟}PK^qPK
n{gRyI#]b?META-INF/maven/com.stream-pi/twitch-chat-connect/pom.properties ; НS8`H
n{gRyI#]b?META-INF/maven/com.stream-pi/twitch-chat-connect/pom.properties ; НS8`H
@x{(SAW9i8u|e)GhhJPX%H<A(rJLn-4`PKyI#]bPKn{gR4AW_META-INF/MANIFEST.MFPK
@x{(SAW9i8u|e)GhhJPX%H<A(rJLn-4`PKyI#]bPKn{gR4AW_META-INF/MANIFEST.MFPK
n{gR AMETA-INF/PK
n{gR AMETA-INF/PK
n{gRAconnect/PK
n{gRAconnect/PK
n{gR Aconnect/chat/PK
n{gR Aconnect/chat/PK
n{gRAMETA-INF/maven/PK
n{gRAMETA-INF/maven/PK
n{gRA>META-INF/maven/com.stream-pi/PK
n{gRA>META-INF/maven/com.stream-pi/PK
n{gR1AyMETA-INF/maven/com.stream-pi/twitch-chat-connect/PKn{gRn]?module-info.classPKn{gRVԱ% connect/TwitchChatConnectAction.classPKn{gRyg$(+ connect/chat/TwitchChatCredentials.classPKn{gRL@r`8 connect/chat/TwitchChatCredentials$ChatCredentials.classPKI cR^q8_META-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlPKn{gRyI#]b?6META-INF/maven/com.stream-pi/twitch-chat-connect/pom.propertiesPK 
n{gR1AyMETA-INF/maven/com.stream-pi/twitch-chat-connect/PKn{gRn]?module-info.classPKn{gRVԱ% connect/TwitchChatConnectAction.classPKn{gRyg$(+ connect/chat/TwitchChatCredentials.classPKn{gRL@r`8 connect/chat/TwitchChatCredentials$ChatCredentials.classPKI cR^q8_META-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlPKn{gRyI#]b?6META-INF/maven/com.stream-pi/twitch-chat-connect/pom.propertiesPK 
PK
PK
p{gR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
p{gR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
p{gR META-INF/PK
p{gR META-INF/PK
p{gR
p{gR
clearchat/PK
clearchat/PK
p{gRMETA-INF/maven/PK
p{gRMETA-INF/maven/PK
p{gRMETA-INF/maven/com.stream-pi/PK
p{gRMETA-INF/maven/com.stream-pi/PK
p{gR/META-INF/maven/com.stream-pi/twitch-clear-chat/PK
p{gR/META-INF/maven/com.stream-pi/twitch-clear-chat/PK
p{gRjImodule-info.classmNN0ДGy;qUWUWG!R*K "{[R]k>F1mbZ)!!JC"F8"tNJdnpi(D8!95iC6kXL5? .m+x7aW¹'% )Y%-2aFrWW?
p{gRjImodule-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
p{gRĖ\`3clearchat/ClearChatAction.classWk{~2z !0 $ ڲ jdAqjh뮥xפz$kӟYY2Fy9s{.sfqxd`E <c:fLtO.8Od|
p{gRĖ\`3clearchat/ClearChatAction.classWk{~2z !0 $ ڲ jdAqjh뮥xפz$kӟYY2Fy9s{.sfqxd`E <c:fLtO.8Od|
.(3LyX`E8%&񪯣Ox!L\5יx^g |t|D_0ч/ &^ėxrgGʼnlqtrb umo![-h$9B_.8KKYNHO9#OkHOkhakD<'){/8<3j[(ʋ+G_eYb*7'EWy«NRy-ˤ}Dae ٪ԬJW2b9)/6q]uQjaӁO:g'rM+O؂k!q,q
.(3LyX`E8%&񪯣Ox!L\5יx^g |t|D_0ч/ &^ėxrgGʼnlqtrb umo![-h$9B_.8KKYNHO9#OkHOkhakD<'){/8<3j[(ʋ+G_eYb*7'EWy«NRy-ˤ}Dae ٪ԬJW2b9)/6q]uQjaӁO:g'rM+O؂k!q,q
,/ntpÜ u5l)I4iWU4u|{ŚQ4Seׂ8pwl{dIPx79,| /Wyue`WDh,{gkqWEtLw,|0(e5<ҒA-(R8_ rOJη'!?Cҕj`Ճ?)O9?~Wtj_a¯;kxʼ9nE޲' _e)WFEjj}̧;6;cSMTRO)L9VR/25Caߚ@JH`%e/؎7D *s  1 "-@ÓWת#[Tut:ntB!~3}wI9V4ٴ:sȕWIHIy㾗;Ht&4y|P4 
,/ntpÜ u5l)I4iWU4u|{ŚQ4Seׂ8pwl{dIPx79,| /Wyue`WDh,{gkqWEtLw,|0(e5<ҒA-(R8_ rOJη'!?Cҕj`Ճ?)O9?~Wtj_a¯;kxʼ9nE޲' _e)WFEjj}̧;6;cSMTRO)L9VR/25Caߚ@JH`%e/؎7D *s  1 "-@ÓWת#[Tut:ntB!~3}wI9V4ٴ:sȕWIHIy㾗;Ht&4y|P4 
J> S+U4u!_|ZN@"J"Ɲ+qv͕Ӷ[dZJ7&,ݮToS^_O/+Qq'X} kXS?'<v6t{rnyAjFxJoWMùV]X?gpK'Tl9۔$dhU*4M[z[<vz.]"_tn:{<71ƞ:{MyRvvU\.^̏S
J> S+U4u!_|ZN@"J"Ɲ+qv͕Ӷ[dZJ7&,ݮToS^_O/+Qq'X} kXS?'<v6t{rnyAjFxJoWMùV]X?gpK'Tl9۔$dhU*4M[z[<vz.]"_tn:{<71ƞ:{MyRvvU\.^̏S
l/ǓZdĐ~5רfh8ͲD52n(u!c$V,"ôMmrd[D&D͙FL{"
l/ǓZdĐ~5רfh8ͲD52n(u!c$V,"ôMmrd[D&D͙FL{"
3Bg&iEҴtw=d۰5OMuۧNT$lm,u]37&ZŶB2a{rG;H"j! v(҄B#"\(_e?0 \݅{2zSMR@ #{tEoF8m$Ä:3(B*uuQP SLMi%TqBxȃ{!1v㤅k4&W6Q*6<G(qgt'xlQlDXرfMqĺw@QJPzCaNsyUV4oitPKĖ\`3PK
3Bg&iEҴtw=d۰5OMuۧNT$lm,u]37&ZŶB2a{rG;H"j! v(҄B#"\(_e?0 \݅{2zSMR@ #{tEoF8m$Ä:3(B*uuQP SLMi%TqBxȃ{!1v㤅k4&W6Q*6<G(qgt'xlQlDXرfMqĺw@QJPzCaNsyUV4oitPKĖ\`3PK
ڊfRi0" 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
ڊfRi0" 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
p{gR9<\`=META-INF/maven/com.stream-pi/twitch-clear-chat/pom.properties 1
p{gR9<\`=META-INF/maven/com.stream-pi/twitch-clear-chat/pom.properties 1
0 (87T7qr1F[жĨ{A;/H7'@ $_e\:ÕhP4H>Q)8Q@57sjPK9<\`PKp{gR4AW_META-INF/MANIFEST.MFPK
0 (87T7qr1F[жĨ{A;/H7'@ $_e\:ÕhP4H>Q)8Q@57sjPK9<\`PKp{gR4AW_META-INF/MANIFEST.MFPK
p{gR AMETA-INF/PK
p{gR AMETA-INF/PK
p{gR
p{gR
Aclearchat/PK
Aclearchat/PK
p{gRAMETA-INF/maven/PK
p{gRAMETA-INF/maven/PK
p{gRAMETA-INF/maven/com.stream-pi/PK
p{gRAMETA-INF/maven/com.stream-pi/PK
p{gR/APMETA-INF/maven/com.stream-pi/twitch-clear-chat/PKp{gRjImodule-info.classPKp{gRĖ\`3clearchat/ClearChatAction.classPKڊfRi0" 6 META-INF/maven/com.stream-pi/twitch-clear-chat/pom.xmlPKp{gR9<\`= META-INF/maven/com.stream-pi/twitch-clear-chat/pom.propertiesPK
p{gR/APMETA-INF/maven/com.stream-pi/twitch-clear-chat/PKp{gRjImodule-info.classPKp{gRĖ\`3clearchat/ClearChatAction.classPKڊfRi0" 6 META-INF/maven/com.stream-pi/twitch-clear-chat/pom.xmlPKp{gR9<\`= META-INF/maven/com.stream-pi/twitch-clear-chat/pom.propertiesPK


PK
PK
o{gR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
o{gR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
o{gR META-INF/PK
o{gR META-INF/PK
o{gRsendchannelmsg/PK
o{gRsendchannelmsg/PK
o{gRMETA-INF/maven/PK
o{gRMETA-INF/maven/PK
o{gRMETA-INF/maven/com.stream-pi/PK
o{gRMETA-INF/maven/com.stream-pi/PK
o{gR5META-INF/maven/com.stream-pi/twitch-send-channel-msg/PK
o{gR5META-INF/maven/com.stream-pi/twitch-send-channel-msg/PK
o{gR)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
o{gR)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
o{gR7h%-sendchannelmsg/SendChannelMessageAction.classW%e1 s+L,˖!MIl@A85uZUvW#J[dMC?̮$۠|#f|xwWqs
o{gR7h%-sendchannelmsg/SendChannelMessageAction.classW%e1 s+L,˖!MIl@A85uZUvW#J[dMC?̮$۠|#f|xwWqs
Qq T0%n.+]Xg/(vQ_XRPPp
Qq T0%n.+]Xg/(vQ_XRPPp
7&TX
7&TX
lx'SQ5f.yNE,_|IƗe|EW|M *‹*u^o[|[wd$a[x>?[ȏOM.\]կiS11 [|Ss![wp*vv5dT*递D62,;-!蟓%A KEꋦ`}vQ7tyʆ+?
lx'SQ5f.yNE,_|IƗe|EW|M *‹*u^o[|[wd$a[x>?[ȏOM.\]կiS11 [|Ss![wp*vv5dT*递D62,;-!蟓%A KEꋦ`}vQ7tyʆ+?
T,%̪Kh Su%1^ "}ݬnƱk A›ryJ;8]zuf@nAo kr5hl̛7(N(ˑ&U@B
T,%̪Kh Su%1^ "}ݬnƱk A›ryJ;8]zuf@nAo kr5hl̛7(N(ˑ&U@B
(VDIB!a:d#J te̮.^f(A˒j'cv %D(zi屿b;Hn@jӊ-O/VZv-U(׽ :٢*(Ys0Fjopl^kduW= kŊ}E7MK}f?1vu0ׄ\سh!~$ay5w4MiCk)& W¸GK2,O,9c=ya'dDO3se~FdKƯ𺆓8Aj\3$h5~#~kF5??/7%kw6 $ Ûa75*xxKxGC[ Cm""\7haX'pNS{vtaK3v,-  nK}Cj0^3,%ݰ^JCU6bTƻn_ccip3j3`N~KwV+3Wđ)mmgY!h
(VDIB!a:d#J te̮.^f(A˒j'cv %D(zi屿b;Hn@jӊ-O/VZv-U(׽ :٢*(Ys0Fjopl^kduW= kŊ}E7MK}f?1vu0ׄ\سh!~$ay5w4MiCk)& W¸GK2,O,9c=ya'dDO3se~FdKƯ𺆓8Aj\3$h5~#~kF5??/7%kw6 $ Ûa75*xxKxGC[ Cm""\7haX'pNS{vtaK3v,-  nK}Cj0^3,%ݰ^JCU6bTƻn_ccip3j3`N~KwV+3Wđ)mmgY!h
¡RGnquM\b.b{eۡjfLTY><RDO^ ya֨ӥprm*>͟Wkށ\p30ܚ/Q1A\7uA*!Έ3K%*b4?<H8+cܺ#tPo<Z+S{NiJNx
¡RGnquM\b.b{eۡjfLTY><RDO^ ya֨ӥprm*>͟Wkށ\p30ܚ/Q1A\7uA*!Έ3K%*b4?<H8+cܺ#tPo<Z+S{NiJNx
oS4&aݡhOlğ92͓i3`if:Y"dK{pt.r6 x]vkܝu}dJh.9;X jŋ *:nj85b %gx<|h/_wE&Hvfׂ9hrR2#E}t&#>6%c%y]HdɘcJ)jCv7ai܉}OOH >NZ>A: +$mt֛ضXG@lfW;\C<!2P|]$`Ћ8JH EV
oS4&aݡhOlğ92͓i3`if:Y"dK{pt.r6 x]vkܝu}dJh.9;X jŋ *:nj85b %gx<|h/_wE&Hvfׂ9hrR2#E}t&#>6%c%y]HdɘcJ)jCv7ai܉}OOH >NZ>A: +$mt֛ضXG@lfW;\C<!2P|]$`Ћ8JH EV
y P!n ANu`Q$72d 0~kCvg[Hɛb¾܀I'>xx*gy
y P!n ANu`Q$72d 0~kCvg[Hɛb¾܀I'>xx*gy
L|~*}Go㨏G> G?KIArRp U { 1
L|~*}Go㨏G> G?KIArRp U { 1
rKp)DE{ cd|> Σ\`0aȟ#ZhEYL]#dm/L(B-De񤌧 IFbG=I;UA2q]
rKp)DE{ cd|> Σ\`0aȟ#ZhEYL]#dm/L(B-De񤌧 IFbG=I;UA2q]
cx[x`Jӟfr^䕮PK7h%PK
cx[x`Jӟfr^䕮PK7h%PK
ڊfRØ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
ڊfRØ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>( PK
[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>( PK
o{gRQLbfCMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.properties ʱ
o{gRQLbfCMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.properties ʱ
0 н_QpnP7q>"F[iis{Zv)HO;k)'hJ4X5nH^Q)åkYzPKQLbfPKo{gR4AW_META-INF/MANIFEST.MFPK
0 н_QpnP7q>"F[iis{Zv)HO;k)'hJ4X5nH^Q)åkYzPKQLbfPKo{gR4AW_META-INF/MANIFEST.MFPK
o{gR AMETA-INF/PK
o{gR AMETA-INF/PK
o{gRAsendchannelmsg/PK
o{gRAsendchannelmsg/PK
o{gRAMETA-INF/maven/PK
o{gRAMETA-INF/maven/PK
o{gRAMETA-INF/maven/com.stream-pi/PK
o{gRAMETA-INF/maven/com.stream-pi/PK
o{gR5AUMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/PKo{gR)G module-info.classPKo{gR7h%-sendchannelmsg/SendChannelMessageAction.classPKڊfRØh>( <t
o{gR5AUMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/PKo{gR)G module-info.classPKo{gR7h%-sendchannelmsg/SendChannelMessageAction.classPKڊfRØh>( <t
META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlPKo{gRQLbfCt META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.propertiesPK
META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlPKo{gRQLbfCt META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.propertiesPK
G
G
PK
iR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
iR META-INF/PK
iR setcolor/PK
iRMETA-INF/maven/PK
iRMETA-INF/maven/com.stream-pi/PK
iR.META-INF/maven/com.stream-pi/twitch-set-color/PK
iRimodule-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
iR` iQAsetcolor/SetColorAction.classW=#Ɍ,8lp-E 0I
dlںc<QgFm%6)ii(I?CQ~sλoƛǿR8$&юI|H'$>*)t%:T
-ls[:opp%$1=I$$2"0kR]J|\|B'EI>>|ZϦ9:>E|A_%_N+I|5<&_O) :4g:GuV-iH_1ͼm:bY젆]UڪN)󚂫7ap]Z%?&)ml:n9VxD-ҖaQՅi卙ӶnɴMϒz1Yþ
J3_TAD)\[yϭ(/N_+JEz6#a0D2*V GMJdt)ZYi6HAB)Vi^55 ɺkPx2m_Ƿ90gF z}upP
dAiIӑ^̕*EH[Y1+:C\8W NWRV:co{@x\-uS”_2wаuE_qL:i*2]B "m{xr4ΘxfY~(û6.W5|ʏG 'NA?gLs遵(jQ /[Nf=3-T|}PѰbW пr"93~%nHo; 0G<eO+^57а<Y첢p%yAױleˇ3݌`>7}h 6O 5 4X5-' ;[&<rd3*Pz-UqܠdfX u2[RƜ5-g@h1t[!`Q'%|w\oa%ae9xuΫٷrn戂Ɉu=F['koM[, 9Eq0ϛI̡'h);44$)& =wt Uv:/]Ɩ*8vah ,x 7P V:e\V!- jƬѥH<R%pNtKf{bz:{=\9݃gƆ#vwt(ǯzj]oS r<z7wϦ't.o)rmvki/Fꏢm$Fp°ia6+Z$
ְtG׶F |Mrș4sy~!ѕTsV=2I-Rmo#|DZiyLx[6>K>Zeht&t&n>& 6k$|cA¾\zS z.9!KoFD"_Fk [rz:ӝ>vC|}`3(^%MA=rt5l[ 7]5%=ao"Keo_}қkxoq"W59
t>꿟@ x9j݇a3:xp/m @+4Hx HL:VCg ]#a%UF뾉>ϯ{﫡&בs;蝈oKF~"M.e|t%R|Ixc;cqvu/2.1&aK!2" SW"<G?a5F{c(g*M&tqt tll|u_ CFG$c)z^a3ð׉3]tw!d#U! : #QCa\)0`4[PK` iQAPK
}gR)@! 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
^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
iR0.[_<META-INF/maven/com.stream-pi/twitch-set-color/pom.properties ʱ@@ 5Db3#KKg~x뻄@V+ sKr@!EjqAF[ldu7krPPK0.[_PKiR4AW_META-INF/MANIFEST.MFPK
iR AMETA-INF/PK
iR Asetcolor/PK
iRAMETA-INF/maven/PK
iRAMETA-INF/maven/com.stream-pi/PK
iR.AOMETA-INF/maven/com.stream-pi/twitch-set-color/PKiRimodule-info.classPKiR` iQAsetcolor/SetColorAction.classPK}gR)@! 5y
META-INF/maven/com.stream-pi/twitch-set-color/pom.xmlPKiR0.[_<m META-INF/maven/com.stream-pi/twitch-set-color/pom.propertiesPK
2
M build.sh
+3 −0
#!/bin/bash
#!/bin/bash
FOLD=../PreBuiltPlugins
FOLD=../PreBuiltPlugins
hotkey() {
hotkey() {
pushd . || exit
pushd . || exit
cd hotkeyaction && mvn clean package
cd hotkeyaction && mvn clean package
mv target/hotkeyaction-1.0.0.jar $FOLD/hotkeyaction.jar
mv target/hotkeyaction-1.0.0.jar $FOLD/hotkeyaction.jar
popd || exit
popd || exit
}
}
mediakey() {
mediakey() {
pushd . || exit
pushd . || exit
cd mediakeyaction && mvn clean package
cd mediakeyaction && mvn clean package
mv target/mediakeyaction-1.0.0.jar $FOLD/mediakeyaction.jar
mv target/mediakeyaction-1.0.0.jar $FOLD/mediakeyaction.jar
popd || exit
popd || exit
}
}
obssuite() {
obssuite() {
pushd . || exit
pushd . || exit
cd obssuite/mother && mvn clean install package
cd obssuite/mother && mvn clean install package
mv target/obssuite_motheraction-1.0.0.jar ../$FOLD/obssuite_motheraction.jar
mv target/obssuite_motheraction-1.0.0.jar ../$FOLD/obssuite_motheraction.jar
cd ../setcurrentprofile && mvn clean package
cd ../setcurrentprofile && mvn clean package
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
cd ../setcurrentscene && mvn clean package
cd ../setcurrentscene && mvn clean package
mv target/obssuite_setcurrentsceneaction-1.0.0.jar ../$FOLD/obssuite_setcurrentsceneaction.jar
mv target/obssuite_setcurrentsceneaction-1.0.0.jar ../$FOLD/obssuite_setcurrentsceneaction.jar
cd ../setcurrenttransition && mvn clean package
cd ../setcurrenttransition && mvn clean package
mv target/obssuite_setcurrenttransitionaction-1.0.0.jar ../$FOLD/obssuite_setcurrenttransitionaction.jar
mv target/obssuite_setcurrenttransitionaction-1.0.0.jar ../$FOLD/obssuite_setcurrenttransitionaction.jar
cd ../setmute && mvn clean package
cd ../setmute && mvn clean package
mv target/obssuite_setmuteaction-1.0.0.jar ../$FOLD/obssuite_setmuteaction.jar
mv target/obssuite_setmuteaction-1.0.0.jar ../$FOLD/obssuite_setmuteaction.jar
cd ../setcurrentprofile && mvn clean package
cd ../setcurrentprofile && mvn clean package
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
mv target/obssuite_setcurrentprofileaction-1.0.0.jar ../$FOLD/obssuite_setcurrentprofileaction.jar
cd ../setpreviewscene && mvn clean package
cd ../setpreviewscene && mvn clean package
mv target/obssuite_setpreviewsceneaction-1.0.0.jar ../$FOLD/obssuite_setpreviewsceneaction.jar
mv target/obssuite_setpreviewsceneaction-1.0.0.jar ../$FOLD/obssuite_setpreviewsceneaction.jar
cd ../setrecording && mvn clean package
cd ../setrecording && mvn clean package
mv target/obssuite_setrecordingaction-1.0.0.jar ../$FOLD/obssuite_setrecordingaction.jar
mv target/obssuite_setrecordingaction-1.0.0.jar ../$FOLD/obssuite_setrecordingaction.jar
cd ../setreplaybuffer && mvn clean package
cd ../setreplaybuffer && mvn clean package
mv target/obssuite_setreplaybufferaction-1.0.0.jar ../$FOLD/obssuite_setreplaybufferaction.jar
mv target/obssuite_setreplaybufferaction-1.0.0.jar ../$FOLD/obssuite_setreplaybufferaction.jar
cd ../setstreaming && mvn clean package
cd ../setstreaming && mvn clean package
mv target/obssuite_setstreamingaction-1.0.0.jar ../$FOLD/obssuite_setstreamingaction.jar
mv target/obssuite_setstreamingaction-1.0.0.jar ../$FOLD/obssuite_setstreamingaction.jar
cd ../setstudiomode && mvn clean package
cd ../setstudiomode && mvn clean package
mv target/obssuite_setstudiomodeaction-1.0.0.jar ../$FOLD/obssuite_setstudiomodeaction.jar
mv target/obssuite_setstudiomodeaction-1.0.0.jar ../$FOLD/obssuite_setstudiomodeaction.jar
cd ../setvolume && mvn clean package
cd ../setvolume && mvn clean package
mv target/obssuite_setvolumeaction-1.0.0.jar ../$FOLD/obssuite_setvolumeaction.jar
mv target/obssuite_setvolumeaction-1.0.0.jar ../$FOLD/obssuite_setvolumeaction.jar
popd || exit
popd || exit
}
}
playaudioclip() {
playaudioclip() {
pushd . || exit
pushd . || exit
cd playaudioclipaction && mvn clean package
cd playaudioclipaction && mvn clean package
mv target/playaudioclipaction-1.0.0.jar $FOLD/playaudioclipaction.jar
mv target/playaudioclipaction-1.0.0.jar $FOLD/playaudioclipaction.jar
popd || exit
popd || exit
}
}
runcommand() {
runcommand() {
pushd . || exit
pushd . || exit
cd runcommandaction && mvn clean package
cd runcommandaction && mvn clean package
mv target/runcommandaction-1.0.0.jar $FOLD/runcommandaction.jar
mv target/runcommandaction-1.0.0.jar $FOLD/runcommandaction.jar
popd || exit
popd || exit
}
}
textblock() {
textblock() {
pushd . || exit
pushd . || exit
cd textblockaction && mvn clean package
cd textblockaction && mvn clean package
mv target/textblockaction-1.0.0.jar $FOLD/textblockaction.jar
mv target/textblockaction-1.0.0.jar $FOLD/textblockaction.jar
popd || exit
popd || exit
}
}
twitter() {
twitter() {
pushd . || exit
pushd . || exit
cd twitteraction && mvn clean package
cd twitteraction && mvn clean package
mv target/twitteraction-1.0.0.jar $FOLD/twitteraction.jar
mv target/twitteraction-1.0.0.jar $FOLD/twitteraction.jar
popd || exit
popd || exit
}
}
twitchchat() {
twitchchat() {
pushd . || exit
pushd . || exit
cd twitch/twitch-chat-connect && mvn clean install package
cd twitch/twitch-chat-connect && mvn clean install package
mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar
mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar
cd ../send-channel-msg && mvn clean install package
cd ../send-channel-msg && mvn clean install package
mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar
mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar
cd ../clear-chat && mvn clean install package
cd ../clear-chat && mvn clean install package
mv target/twitch-clear-chat-1.0.0.jar ../$FOLD/twitch-clear-chat.jar
mv target/twitch-clear-chat-1.0.0.jar ../$FOLD/twitch-clear-chat.jar
cd ../set-color && mvn clean install package
mv target/twitch-set-color-1.0.0.jar ../$FOLD/twitch-set-color.jar
popd || exit
popd || exit
}
}
websiteaction() {
websiteaction() {
pushd . || exit
pushd . || exit
cd websiteaction && mvn clean package
cd websiteaction && mvn clean package
mv target/websiteaction-1.0.0.jar $FOLD/websiteaction.jar
mv target/websiteaction-1.0.0.jar $FOLD/websiteaction.jar
popd || exit
popd || exit
}
}
case "$1" in
case "$1" in
hotkey)
hotkey)
hotkey
hotkey
;;
;;
mediakey)
mediakey)
mediakey
mediakey
;;
;;
playaudioclip)
playaudioclip)
playaudioclip
playaudioclip
;;
;;
runcommand)
runcommand)
runcommand
runcommand
;;
;;
textblock)
textblock)
textblock
textblock
;;
;;
twitter)
twitter)
twitter
twitter
;;
;;
website)
website)
website
website
;;
;;
obssuite)
obssuite)
obssuite
obssuite
;;
;;
twitchchat)
twitchchat)
twitchchat
twitchchat
;;
;;
*)
*)
# build all actions as default
# build all actions as default
hotkey
hotkey
mediakey
mediakey
obssuite
obssuite
playaudioclip
playaudioclip
runcommand
runcommand
textblock
textblock
twitter
twitter
twitchchat
twitchchat
website
website
;;
;;
esac
esac
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.normalaction.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.UUID;
public class ClearChatAction extends NormalAction
public class ClearChatAction extends NormalAction
{
{
private static final String CHANNEL_NAME_KEY = UUID.randomUUID().toString();
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(CHANNEL_NAME_KEY, 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(CHANNEL_NAME_KEY).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
{
{
twirk.close();
if (twirk != null) {
try
{
twirk.disconnect();
} catch (Exception ex) {
throw new StreamPiException("Twitch Connection error", "Please try again.");
}
}
}
}
}
}
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.normalaction.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.UUID;
public class SendChannelMessageAction extends NormalAction
public class SendChannelMessageAction extends NormalAction
{
{
private static final String CHANNEL_NAME_KEY = UUID.randomUUID().toString();
private final String channelNameKey = "channel_name_scm";
private static final String CHANNEL_MSG_KEY = UUID.randomUUID().toString();
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(CHANNEL_NAME_KEY, 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(CHANNEL_MSG_KEY, 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(CHANNEL_NAME_KEY).getStringValue();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String message = getClientProperties().getSingleProperty(CHANNEL_MSG_KEY).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
{
{
twirk.close();
if (twirk != null) {
try
{
twirk.disconnect();
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}
}
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
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">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-set-color</artifactId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<streamPiActionApiVersion>1.0.0</streamPiActionApiVersion>
<streamPiUtilVersion>1.0.0</streamPiUtilVersion>
<streamPiTwitchChatConnectVersion>1.0.0</streamPiTwitchChatConnectVersion>
<javaTwirkVersion>0.6.3</javaTwirkVersion>
</properties>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>test-jar</id>
<phase>package</phase>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>11</release>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.stream-pi</groupId>
<artifactId>util</artifactId>
<version>${streamPiUtilVersion}</version>
</dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<artifactId>action-api</artifactId>
<version>${streamPiActionApiVersion}</version>
</dependency>
<dependency>
<groupId>com.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
</dependency>
<dependency>
<groupId>com.stream-pi</groupId>
<artifactId>twitch-chat-connect</artifactId>
<version>${streamPiTwitchChatConnectVersion}</version>
</dependency>
</dependencies>
</project>
module com.stream_pi.twitch.setcoloraction {
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchchatconnectaction;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with setcolor.SetColorAction;
}
package setcolor;
import com.gikk.twirk.Twirk;
import com.gikk.twirk.TwirkBuilder;
import com.stream_pi.action_api.actionproperty.property.Property;
import com.stream_pi.action_api.actionproperty.property.Type;
import com.stream_pi.action_api.normalaction.NormalAction;
import com.stream_pi.util.exception.StreamPiException;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
public class SetColorAction extends NormalAction
{
private final String channelNameKey = "channel_name_sc";
private final String usernameColorKey = "username_color_sc";
private Twirk twirk;
@Override
public void initProperties() throws Exception
{
setName("Set Color");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions#twitch-chat-integration");
}
@Override
public void initAction() throws Exception
{
Property channelName = new Property(channelNameKey, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
Property usernameColor = new Property(usernameColorKey, Type.STRING);
usernameColor.setDisplayName("Color");
usernameColor.setDefaultValueStr("color");
usernameColor.setCanBeBlank(false);
addClientProperties(channelName, usernameColor);
}
@Override
public void onActionClicked() throws Exception
{
final TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
credentials.ensureCredentialsInitialized();
final String channel = getClientProperties().getSingleProperty(channelNameKey).getStringValue();
final String color = getClientProperties().getSingleProperty(usernameColorKey).getStringValue();
try
{
twirk = new TwirkBuilder(channel, credentials.getNickname(), credentials.getOauthToken()).build();
twirk.connect();
twirk.channelMessage(String.format("/color %s", color));
} catch (Exception ex)
{
throw new StreamPiException(
"Failed to change username color",
String.format("Could not change username color to '%s' for '%s' channel, please try again.",
color, channel)
);
}
}
@Override
public void onShutDown() throws Exception
{
if (twirk != null) {
try
{
twirk.disconnect();
} catch (Exception ex) {
throw new StreamPiException("Twitch connection error", "Please try again.");
}
}
}
}