essential-actions

Clone or download

Merge pull request #6 from j4ckofalltrades/twitch-action

Initial Twitch Chat action implemenation

Modified Files

A .gitignore
+4 −0
*.iml
.idea/
target/
PK
٫mQ META-INF/PK
ثmQ_ZnMETA-INF/MANIFEST.MFMLK-. K-*ϳR03r,J,K-BV+$xJ3sJt*2K
yRKRS@TIJ<c=3=C]l-zFF\\PK
׫mQcom/PK
׫mQ com/gikk/PK
ثmQcom/gikk/twirk/PK
׫mQcom/gikk/twirk/types/PK
׫mQ com/gikk/twirk/types/usernotice/PK
׫mQ(com/gikk/twirk/types/usernotice/subtype/PK
׫mQcom/gikk/twirk/types/users/PK
׫mQcom/gikk/twirk/types/mode/PK
׫mQcom/gikk/twirk/types/reconnect/PK
׫mQcom/gikk/twirk/types/cheer/PK
׫mQcom/gikk/twirk/types/notice/PK
׫mQcom/gikk/twirk/types/clearChat/PK
׫mQ com/gikk/twirk/types/hostTarget/PK
ثmQ#com/gikk/twirk/types/twitchMessage/PK
׫mQcom/gikk/twirk/types/roomstate/PK
ثmQcom/gikk/twirk/types/emote/PK
׫mQcom/gikk/twirk/types/privmsg/PK
׫mQcom/gikk/twirk/events/PK
׫mQcom/gikk/twirk/enums/PK
ثmQcom/gikk/twirk/commands/PK
׫mQh* I%!com/gikk/twirk/TwirkBuilder.class |UosL;ې&m=df[Җ@[*҃&ff'ζTETAE(
EA.I[)"'x_x+x o&fM|yo٧^yQĚ0Jƣx9,'VOS\5~:'x&g-p'r=N8!'s'?ǜr3N~eK~D"~?F'9#?GW+aī@]B(".=;d>cX9=KjxZ$f6I(7&a>RY&(39"$FLFO &Һ00CW&x25:7ws)GY7b̭Z6Os9ӖӜaN1fMoڐUe 3nҲo.4ֵY˙)Y&CfbO4xo V<6Z)^7;9<<Y5cx˃q̱
O[JP1U9#1id,tR A8m잌I^K #3gFH&+ 7S|&aL|ǤT2+`>R}xL: 2;ɗȰ>ONw2)sy4tZ7ȣ^ӛcCzv6 -]˦.,5GR94n`M-1ڧfR\Ji^roJ.*~ԛh[O1rvrm,f[ˑ<US@NvؚUr'|<Z1_<ʾBť{ȵD<ОTb|^/Gvst9RH}B]g\r*Og%[-P^g`,=Qd'-6w^/;!ݨa$P6#?3B03DCְH0*I9YٜjG>1hmQ^Ad-<Cl6d]Ѓ"2dQUj;F;NU;
^ѢAet(ڏQN=N:Tݏy>Ptir?+š&bNSd+t9kfEP~\?UD[:,v(B!׾;#PQeK.$H0y8+/ET$%"UNߐT>y]&coՓ!@!+z&M)BdQqQq,n*OU3.kѭDbQ:Q1f`a93[Ґ)skEcM8V4bhV;TB0HO8sXN{UQHܟu)Xb68T*^^}جL lQяzRKMfS/N,-[Sc7 p7]54&-U,ƍ$5%f:Jhq~;
-]9GK8b@#DxYpQ0Ak5=3.<Țs:t8l8rVZL=k빿
5S`ᨢ@a߄I ё}rəUнE`uH- L 6FQ!㼖;StsY6,mԺ[Zi",.|Vy:o/#C P8ۑ_<]Ox;<|Ә<s܆,I-iwFE_dv_LODQU|ƽ}":TLPJU#fk*аFA9#coXE kq'+7N{yV9M /3!__[2mvNL\@tFIg5^aVc F8Q09shOe*s
2+s
2H+s
2x+s2+s
2&6 :q;} =7Pz> QR*v"V2PX]sb(ՉPbb`?*w<00U΂ꘘ@Mv?B؇C8.A1we8"|MSgJp'MԽ(*5F,E Vtl%F 3HhRiըer\!xBW1Rz{ҐF$3ID*t8²xh4{KT..tZx vw'F`,eXf
b֖bه
kZz omh;W8kr*ϙKQPS)=y1\Ccg | y (=`.Mga9^ 0,]^.{ƪ°ݸ {`Xo-tD'}`o {ku!س>0I]Bu' >0VX]J3$ak荭Br)/0BSSeMܫ[\zO8p;`0A߲"+e>s[nA!,_zG>j!P-A4N璂vۇ߅wsyfa#dO#C璁 ^zz* >nqZo7.7=t7׹\p~o75.7f.7;܀=#sA{a (Х7Xo{Pzb6KNX0CTqba[$͉coV| ;_b۝K6 @bcN؏Qqv](N;bZV]U|wy`YE܉%{7U|
x`6*N{>
֩봱wTj&|XMh-:x̨s+;XlttnbmtFLѻ HeSbpt+*89' xM6O3xuS^y]Ѱ xPiJpHZ=,`%bGI2WPK
׫mQ pU!com/gikk/twirk/BotExample$1.class}Rn@=ָ$iIJ34@BM%v<-AJ6`8tǎI_XW!(4"Q={؟ǖ9M<vr8q<xQa~I}QxanNֈ}/f_@7 +); a Gmm,:n$!h 3X ѡƱIPUn}2b[{!<Ő.'Kw2k'zJ:nOld$3R <?e>"lqT,w,Xs<sgШm(E4ːKA D7pd͒VYPXo{IxZQil>Xf
Ťfʦ賰@])o`H] TՌ$6'b+w?/Bùi9{
u C{8!SQ6P v
XVC+9#wr[X:obQg0PK
׫mQR[xd .com/gikk/twirk/TwirkMaintainanceListener.classVVW|0F@H×&Rj
 j?ƁL:3>@meVg3c! %k&9'[؏w{QLc&ObhOm69V,"R[Qd*9]k#| Zc#al*jf^(R纽ސiftSw+M6y*0H{V7ERcZyl]cLw6K+LaSFQ9̢dvW҆fM/ǠI~X报/Qym[w<ˁDiKT_oQz{PNӴ2J8>V|åC IWGRz67e.N2MgMI)nUXe'>qYS}RqK<Qp(uX%*+_0UA cGE7*%& $kNB3l-$hLXBH+д܆0WQn{* TpK
(

$ڋ
:jzt?Hͱ7bQ5w*;W+ɼo4jctoq O&Nu?W~uҿ;J+/t)٢d.;}0(܌%sum16l]{G8 p͛rSgr.MEv[s-LE6L)ˮ; M'kw+p(prx[l$yxՇ+s?@l5ѱz]~M(:  ୆Ug#AMIT+^O4?yCx"rh'{GWqHV9~ 8&} F8Հ3qӑ!'H]#O"呏z^c8U SU\;Az70)xSP.^_A
l@wbjBSI64n1SU1S<(ӌ`뛘jHҩgtH Ct@izdwHv3Gíqw۔?ZoSA7~޺gn#S},D9~ס
ZPK
׫mQ`(/com/gikk/twirk/types/AbstractEmoteMessage.class}PN0=+( #[!!(tbs+6k |I[1P1< /d֓hgF4 2\*Yz8?aBlt|YELjXHf
ߗ$U\ɀSbdʖu*ZrNi&,U/L٪۲H֤<B%'ŧJ :68SNO4x5-Fwm}5_=APK
׫mQ7C~ >com/gikk/twirk/types/usernotice/DefaultUsernoticeBuilder.classV[sE&d& !Q1pgY@D @4fC1 ːefxŻxWx_!jJߙ$$nLت>Oϟ G;2 dPO
uZO%40QaŒe>g ':hƸ@!EѺh`00naBaJP:c.ɼ㊎uA`k0.Xt*ҙw
n vZ
|z B5d\
K>w[7tOrґ +gf(\!~ ;\-HQ]B,hPAi4N1t]C/xY:s3kCԗNX-2N~Spj#Lt`r5V~+Xx!8{M}*Ó3C%'?fLnTH gս+UOu/x6"CkV7rVQ@^CM'βZ 8DE2o˒ۖ!J~sޭ ձK~qU
uڪ"2B,k1p o)lG\Q^36Q؁5$BII»xO<lw$9]b]O22~Ͽ/‡=6Fs΅cBDaV)^B7)|)]K-t_) a,w}̸i~ pȚДlf~ii9
ے \ː`Xj6<>]KyQ`̉Zs=1o⌆ʢ9/:[^7(Pz ޭ%Q]ya5P z{p}kM8? ?6=Ҥj+ٯyWEΦl)̆=z-4gs]оBX Ec^Z(cj4LVPu$fGiL8H/
I蘝)474K|{obMʼ/"SP)~7GL[HYٚIBS\"[7Ipt޼7qطQqdGarl%kDPZ[m،S\!\uBu0}M!<N`EEUTP<P1yN0H%tj 2/C gQ4EAB`,3>Y PK
׫mQ=6com/gikk/twirk/types/usernotice/SubscriptionImpl.classT[SPN ;mD(vPʁ6$3V(='bX^vl~~{vfچv̤ІYasW{oE  ,&2R+ZZKHw_r쫚uǴˋ "h˫3+U=pXkCs`f?]0*&Cڡ\
J |e>]^7%Q </Y[ a+BK*б-.2δ>\nTHq̍z`ύBYNZ4;O*'I\&7;~ֶB[2t2ٳZ@mf9/so;?ڻN5n;&uБwѺQ玷Au^v/ۡθmj.\t|IbUt ]*A>'H
'2L0tf, fZ&ߋHlu^.{ϐɬ92wl1-Iri4uH{4i4Ts"?0m6@TЀ+ ĴXqm(%W$RD&^""KD!tG@Q@Fq&#zDF."#! &bSU\ ͦ29*UO0!J8ZXx"XxHq<y*xɼBŷЬABy E@=QnJĈ,'~7IL~F*fTِNFNI,6etPK
׫mQ$$7com/gikk/twirk/types/usernotice/UsernoticeBuilder.classQJ@}cjBӋ T<xz
ܤc6MdQ+oG""T͛Y 6C,GX XLjAZNe'ia|qޞPUw-+2EiuJݨ:;<g 7 z$Jt^&cts3 [XŚܞ:nUɳdL)oB}wp</Y!|& x_WgxOyaƀ#e\rj>PK
׫mQ;Q:com/gikk/twirk/types/usernotice/SubscriptionGiftImpl.classRMo@}k; nQS( |R*PH n%lؖG!DāBnKH\ff߾ff?}`jv5]NC
?orS|/7' NI<ysntQtOE,3~k9[e81?)^AIB?PKВEx&So"=Qd/R{'RAf""_whF|q.O+t7.
oܨ9J,/ajGuܳqk6*\Ͱ?2N*8dx/GLt՘׺jRiXݯcbN1k`}8`}!@lE^m:$.&+8LW+$y;{~lUKkQRl}ZT+;˝{⛚PK
׫mQ˙ 4com/gikk/twirk/types/usernotice/subtype/Ritual.classE;0΄@'H(J(M@\p(DxdY?iaE}"lS)kjΝ5>yTGS8Bɮam؁ϛʶ3Rq"T%B a:0BPK
׫mQ$ 97:com/gikk/twirk/types/usernotice/subtype/Subscription.classPR0 R@E_p㌊CoBAi$<~k)!lݼϯt=t< CtjC+GIX`RXHJ2ĉ@KN3N
X>
wF@?SF?o .yؑA-@ZIfB]⑝hN!P!{C/o6lw۟:8QQӧ0V.5l2Y4k ~@_S%`y8ӹ\E@lU<QCTr
cG98e&Y~jPK
׫mQ c>com/gikk/twirk/types/usernotice/subtype/SubscriptionGift.class]NjAz/Ź x \a\ZefV<(, (
vD7B;Bj֊ O<ANȤIE-ti=ˋ)>~q^Zg_?.,s3U?cD'υv LYiʤsvo-j p[†_PK
׫mQx2com/gikk/twirk/types/usernotice/subtype/Raid.classEM
0j
b6\*
zXCHmҦWs<,ރ7<_z]P
{0u߶<.7)pq-J9a7F*a{.suZZ[B0 [ߞ}Ibr&UNoX]R3gc*"By-DCh;mPK
׫mQxqY>com/gikk/twirk/types/usernotice/subtype/SubscriptionPlan.classT[sVdɖ(qqnv.NBhɕ@s)"ZF6+b˩e;}K_\2<wG{ɄOD3>{;{vW?| `PU\Sq^jXeOr#BFdk  naHö paSC\m Tܑ6w=ع\0-V+钳he ϮպS^Xlbٯ;Uwl T&nw5 6276؞gl FJӭRڬDr)aIԄ'a)<Z}Hko5*v*YȰ'idEj)U!Zt\Lj5sj#-Gdj\JR%"8%ת7jBDZɮZ;HlJ-(oլ
UJ4Vqoe49Cln-]&ڨ'=2ɹtopSHᮎI9Ft \Pq_w^ߩ9:Q`vrnnܙ;ǮarQ`gVѕbv]S3.jv=2mz¤aiwWO_<u%d|;8[Eaϱ9B
FiBz;Oɓ|R|
c~,J p|qZV&OVfA֕xPj%TLy AU}؏UĬq˧SBM c_—4YVLvTnܠOW?h;%yypw +1ioŔOdms"GTܝij0 }ݸL9q̉fӯ {UȒt?аE_ѯAltQS!g^DY8kЧMDWH65&琞 J"4.RiPXa/aY+PK
׫mQ|>L<0com/gikk/twirk/types/usernotice/RitualImpl.classJPmӦiS\Q;ōPJVO%6?("|(q+((!{&g9$oAA2*z**vXvړ}k[z\"'"7z`P΢+6&"4px|i;~\_رtTH'nXX,y'b7<҄a$˭Y<)Dr-iw0-6cm26QQî*TZMΒa|:Y0+`΂Џ)ѹ:UԘtf<{6ihI~:M&2*@`Z*J_j}m(0 ۹ PK
׫mQUY.com/gikk/twirk/types/usernotice/RaidImpl.classRMO@M$nZh - |֪J"*AY @%"$~MJ*Tdh<w7
Xº*CUl1d6 O8Tg;JBvh?)✁*_d, SS0XɈF52x(ҟ|i$рR=A+%3$c?''~~&SE&8e CJO"JE~i ]-}`:.v5;]ڶ6}*Xᮚ頎a;sC34~ E@;SgPaz8&}
08*>)u VF5=LazSX 7Ф=hKZz3F;t )o6^͝}:kɻq`UьbR*J#VfPK
׫mQ9f 4com/gikk/twirk/types/usernotice/UsernoticeImpl.classUVU$.Ho6ЖX@l P vp`s)%|ZVGraXG9{OƱ
)a=4#6=a)1z`d0*2*2*1*1bylbGP 
2]㹡[F<GT9q[
|OXJvհi USlđ|ɮe{¡fND]>}䦉R#[rdP%|R0ߙZ"3+Kez j%̊홮\yz5rZ2s̪&(gTj
E.ɶ+ d,ЅNLLe_Yجme: {ӛUsٯMg(Z&w]2 lθ#W<JPq7FRw.^w
ҟjں-zL2A0><ˑ:iPʉSIDw9ZI?~)0S;;@w3J{KF-h,Ӗ?cS)[] JFE;)'Ek y/70=
./Pl|2^] |/Y inbD>*| 1`&j>Y C g9jVi?ztoY^fr'4_PS? c>$J/DP׼\?A(xid_O?]BK!ٗ[ȾbL ZS 5M$Pr^#1: l e t=Ց`Jd0|u[GoԑBYR'Auq]#=j&U))t[֩'T8E 4Tҙ @pjP9 [3eB:oHq Qd<')8.lOaN''"7 DHDE2RD",bDww/RD:B\H鰈Ȇo>.{$+wyY 8C}-?Axk00eoIHŠXWS;$"ٌ,k<'(pt%:ь^|a;FPK
׫mQ>'= 0com/gikk/twirk/types/usernotice/TypeParser.classVVGMv٬" jB$F[*5m,kXIhiCyzgv!TSr3w~?\
NC IC^Ɣ%(q_Ƭ"Wɘ#|܁J
cQ'
4|5I\A/ nc̗&%X
@BE
CbܮuClY:v*4ke˝3Uhy4 ku+07Zbfuۥqay٦guǷM+;G%Uf {ajQ2WGEer8Ž֌Cꥠ ekTQ=4֌lըWEߵNTzp n:ͺt.A,{k7|۩3̿.'Dͩ+绖JĽõ-R
 Čte8*c? P7U@X- 4 ӯ-S\!{_gP?r:ikORr2nVݟ[p]y tJiul6U '3_}sSּJ<7j=%.VT1}QXu˝൮~N5 fY5|FfS]oiV33Aqp@Oo!54^TScT .yov7Ua!âvU|/#_wҿ h+hÑV.?L*8Ê缠1~눲0y#mgCqE?4@8Uw.Qs0z:dLn67T4
[ ?CWyL]_l!ܮ>7ˇFj[+-4vݻgm<gԘHNaeZzW
Y<_,{9N?_MIYצ7~%!7iLe'ޢQ 4,,CG|&E BJk-H\߆\:7DǓ]tMXu$ D)a$n
0Jwi!)B'8O.<XV2Y,5E:֒[P@Gi_xZ;,XbO9O#&~1iZi >8H Hܣ\Y
ܓ4%O.tH m6`}BOb!S]"z)Ocpt BB¸@<AajLnr'6zK6qE9OsVp<@_៌bK
m?gO@7H:&.,4yCX&RP#(*}'WOrUWB:ܛND,J'U0m PK
׫mQFE<<0com/gikk/twirk/types/usernotice/Usernotice.classN1,*ăJƋl]N12ή+`BC;?i;z+8ԃgmN?J"$h_Zҳw D@ʜ/r*fh(Q Ga:Nk+&I C- 2Mn0I wQrvHN|^sN^΄z1My.Cwp%B>W((UT`cXU^zsCo]G1g'yPK
׫mQKٞn8com/gikk/twirk/types/users/DefaultUserstateBuilder.classSJ1=N[lŅ" TԂilSd2?oPi]侒s;u,80  Lژ1mcږR0$rCr?Q,/)K\I㷂I]!z nUܸ^* Q(T+8kI"ClLxW;aȫ=mJEIz}4'
Ҵ;K/gЋ f1ǐ뤸z7y*cX[n6bP)
r'EG\OTJKAy*_pHE[ 4=srI3ҩx;MҊ2$3ij n`i=oH\KĻϤcltX 1c_PK
׫mQgT4*com/gikk/twirk/types/users/Userstate.classmN0EҖ*bn
K] +rԕk,>
1* ϕGs\  0 SLf,>]8nՍa0]\"V/SBSkR[TĄ@IacC2gꔝ 9dHbr\7mB-܉i?OBFƫHyGh GO&BgHWe&uN%l6ucL|E ۂ'B`m!J;kJb'oZ7PK
׫mQ^+com/gikk/twirk/types/users/TwitchUser.classmN@E(ML`lܱS0[”2%ֆWsPЄ8s>\B de.%Wn ;U 6 ^z볔g { }43(v:;θߋWH2/ ӥ{<?y‘(#B+wKMt{XwF%(=yn:Jb&#H٠Lhӹ2PՊ<",,2c &Z8F1PK
׫mQkId/com/gikk/twirk/types/users/TwitchUserImpl.classSkOQ=JKayA[@V!
"h)fۮen%'M4ac?8݀7J9g3sff7
V㰂((5fk֙3`,,,,l٦I|hUʶV#탦R^5+F) К3'~gTS%" V9gn-cM*2d˅2ߊ xB<J \rrQǪyjTUT+Vսثw7;1*h^~+]4J$0r2DUbU5j3}j=:Z^Y x"H%}V̐;-SQj}bs1 3ruœefeͽ=²iӥj .co&I@A+PX S7M*unVkOϱLra|QЏ[
ns89<@H=(}w1,:/2Gz$XYY&Z#p6R6:8`AjFjFFa+,4po+9cklbQnBcB7c/C&jb!d<J֓d<MonP=YqiAAv>( NAd&xJ*DIŃR-^Rq[,IŭnqL*=T<qrJ*~F[ᮜBp![/~PK
׫mQjR.com/gikk/twirk/types/users/UserstateImpl.classSNQ]m\
HE$DCD}0v|Є~e{ڀE5'{:9߾
0-233+0+0[bl2f+VJx,aMº@{4LK@l $}l;j]>Tߩ6jJɱF-OԬRKܲ{U6:\[NI=]1JM?:R:R[RqދEꦣ4%K=, ̧}jo+|lhoTpQmՍf3uJ[/1ls8P-[QN6:Ar8jތ-wП΄USI?|JLEtsz"(U6u?_a2Ʊ!(*d\à! %uܐq20(l>+jG`2j?kb4=^GǑZH3Hc8?[m{D!Sgxhczhgy;<N+=|Fܦ5È)N̤&;92S["#wriH>PzU:CۇbFnLc@<*EA<~x$TBũPq2(·ŝWCųx"
\h=APCjPK
׫mQDu9com/gikk/twirk/types/users/DefaultTwitchUserBuilder.classSJ1=팎u׺/m]\@.* >NQ+}QP(fZ-9<<<XŬ#HØq&& y!MX:SbxW l*Kpĕ~;jgX+8^îz"yB8dԎ)J"T!Q&is Ua?zw9ߓQт0,= uy/<m%O]ILa!MWfV ~­P~UP+_СBR~_4\_~L s44ɳȲI3҉=mM҈$A/iny 7;GN%~bEtGL600a_PK
׫mQ.2com/gikk/twirk/types/users/TwitchUserBuilder.classMK@߉1icS#ASՃUOtۦIɇʛG"w݇|}pMk..ZIpwlz8 ʉEc./ .
su?#Uy1z#Cb.AUIIf}/QyOxYG|M ԓ"Rn:62Dqp8q#o aeW|J]i tY)HDW PK
׫mQُ1com/gikk/twirk/types/users/UserstateBuilder.classQJ@}SӦVŻVASՃU&i"F
~%RDto 3ff?^aG;aGG$lFW%7Jt)TUE.Zm2阋>;L MƧ,bT"ß;o.K}g !y^18Dk/;6_la ܂ur*Y΢ rƾɌeCxpV2h?¶;kQ{t@#ѕyuPK
׫mQ!>(com/gikk/twirk/types/mode/ModeImpl.classRmOA~o+@yQPB_ajBR W-k]^ɽ41?e]$6ݝyf?Bk6Jxa#M [ކ6,-T,T 8<u@mBV^J?P#w }x" eH5;Un4P/2t{S)`
Ġ|IȽV^`ؕDE]SlWZ\4AkD=;k@0}V\iJz.}P0B+a\1 `1Ȅq8H x8JK[x]Cb–I8zrM찊wHH6)V`Hįՙhg1Q ARC"7HalLb3Yi&-1!XsL}9s8mh 7DJ"غ ^JU ,?PK
׫mQY5r/com/gikk/twirk/types/mode/Mode$MODE_EVENT.classSo`~^Zh ئc_RQN>I?,+v+r,qFg(#[6˽sϵ?P@! <AR‚n2fJf9⩌(9 fZlַ) [ٯ4+Zu]r~3dvuCm~dn・I-2zhJb0dM:2!oKa^]6,a|I<25t;1lSLM$ڦ4=sٵx9S]{pTm7l =b<!θՅڊ;얦A*7֎9" U,x X wbQD&u2Nϥԅ= akcxy{YN-* B9GV̔"@_QF`8"dC~nˈ[%&#x9
wu yR:z5qc!O{1I8|(Q$hfK cH}ᴟHaPK
׫mQq$ +com/gikk/twirk/types/mode/ModeBuilder.classPN@ NLB -! D@DyvsEG!"
 bng5sb聰bbLV7iM`JrGS
>sbj&pҘt
%&& uJY !%y͸t*l_]M^֟Agg-lY <Qтc9Y>&uO8:ɩ]am@7/<KN Z0tHު|PK
׫mQzDc$com/gikk/twirk/types/mode/Mode.classP=OA}‰
FmrL.Ǟ]15 ?0gCcżL{~}A[XDTEF5~Zv=rl&JrG?U1g=n JϞL 6:76Փ2
!.~3Q\,cxDUs?$L"~@H*U9u@rQ6Q *qxwPK
׫mQ 2com/gikk/twirk/types/mode/DefaultModeBuilder.classTRA=m0H@VD&$YԤ' Ʉ~_RZ~x{ , Jr]?}`
epcPhǸ@-qS~\!
۴>0# JwaKX`xb5ap3V,[ TZQK֖j&wR+5I 0xj7:Sڎ5lS7JdLm77=V((Fyڅ1S
e.TZyE3uo(=NƚuVŚ^^&dO$l7ܲWw3Re<~
/V -gkŭ\آXr՚YK8ޓmcWp )HA S+RD
XA=
)SQЋ>&+eQ&=50#[EjxyFg E_SKZ m+:me\lٚi[/u{;x?D|2|JfiƒPo
VF7N+?q0m!b:gGc?My]!h?}rWI$QzFxB&aHÿ|{hه? {u7>RSݐ uQ<Mtzn`iVp[¨CS&ei9J%AE= PK
׫mQAv2com/gikk/twirk/types/reconnect/ReconnectImpl.classPJ@}ӴI*ҽxS!(h}.udlӊIЏ[=xS<ffD/E'XS٘мuϚɍ˪~$^,қYrLԯ3BxZ'!}rK_Tdbl ݨ(b2WM 0&D@Im8}R,t}PK
׫mQ(l.com/gikk/twirk/types/reconnect/Reconnect.class;o>vvVv6FҢT̜TFIJDF\l" YYZ_SW ҡ @PK
׫mQm5com/gikk/twirk/types/reconnect/ReconnectBuilder.classP=KA}/wq&* [(6 VAAEܻ&=9GA4)7|}8vuFN.A|ozQVtnSm%uYg^_eg-\A9fBgd_ԳiC[BVuYW۠pb ߛmlb kua\/ӉLu֟VzX"k`MD]>@wohJNh@E$x5PK
׫mQE)I<com/gikk/twirk/types/reconnect/DefaultReconnectBuilder.classQMK@}&MuqA
*tۦII?%Nb-"˼70oϯD¢BK-J:XoQVCu=_I/`F Z2Y>&V EGz"1LJXQ*?FArE:hx`zٓYoe2Q̹W':/[]y'˰`A@Bj6S2sv0X|\8Ù`$FsczRN1˱8HGe,nf7=WPK
׫mQY *com/gikk/twirk/types/cheer/CheerImpl.classT[sSU];$'I6 RZ\Bk`ڄj'19mn&'eE?O/38/G0kJ1Ifw]moŎX!eyc>"~/VXk^|h#?d`݋$~\dž 6 ɾ)[>𮯭o___lfhSyJeg,6,/>3SIdf,e۹,0I'AJ+vٺ(eZ-5f͖6Sw
6^VJp5wV=-XV-,dZ$N#o9K
=p#уrX_4"MDe3AWui `Nv(rΪYUɱ{Z%)Gf|8]J|w52k/Vfvd<RKD }m9UiԲ[@g eV7&1enf!|ͼ˙6jU̝YVYnRr#԰99'zcc5Nesmg|gl9 pq_@@A^Rf-*0Rϩ )Añm?/[nǬV2 09`_`–4K\.zzdZM]W:~C1äv䐑9C :o=|'e|JR360NX 1(J\90 ~V-C!c>܎gAnAOp |@}5R{c0X73`Zap>h'7pvQ1۩M*dޅP mQ/n-V![Ia墍E9
$wSzO~?cs>#~Ɉ*ơo$O2*DP2a1&B&:c#{GM51HGv*:,'<k{y]$*.#Eb _.E~uPyw:tԨ<&jumqF ;h }?PK
׫mQ3Z&com/gikk/twirk/types/cheer/Cheer.class;o>^vnvF̒bFf MOF. 781=ADC'+,Q?'1/]?(3/ݚ3"4ȇ]'9?W?=3;[<HV'g;ȐTkʀUgVZcuWp~iQr[f\`z e
ed@蟔\,a`a`Ҭ l`( $PK
׫mQM u}*com/gikk/twirk/types/cheer/CheerType.classSmOP~֭])۬07 &a3LйR(t:J@h4|G- aksy{sν￟,e ü CEOXEIOUZ. {YX> 77W 0rZ$?ۆg-$dyY-V7J Cvlrn~%kʻ0~`͐d.J]"8iP 땦o9-yA*Zp<_caϦ5*j3NFqtn9d&,K#%+^Q5Rfeٯd"6/5+ A@5L 
nbripAclw, YnӻξmyJ.oR,[[_ב% zi]h ;n6Ț"->;Bg!ad4ɔ?nBWեD POy)Ns#) L\)#7;yhn 8E!HX) A?b5Ea< $a -vBJ-yZ `n&yŷ Ҷ) &Á&;|!s[:F<;UqVz?PK
׫mQߑ:x+com/gikk/twirk/types/cheer/CheerTheme.classSmOP~֭]WYaʋo CM(KR3]_P1 Qs˂Ússsn_x2(")B.xdYBBC,W$q' ˭=lhU^׼K{5t{5a_QnMx隭;U乖SqQ|YbH8#2UBy@4E1wڍ
EM'!1=t4t [јZlZRfѐHɪ:v jlIJW>_h*=hRް4)^ړ!g]#0lS91%)P
&Sp yW1J_mUk? +ݭ+PNt.M[94 `VnmR]rЍKk995I$&!kqIG}E O1L 1'1"ʪ˿AR9Mޛ5a AJS3 _ _`(
D K!9c%)pkPW͐Ž.?4|?DPNR:T#O]EPG|7I~hi_ V:;X쓕hpsid|=PK
׫mQ"y`,com/gikk/twirk/types/cheer/CheerParser.classTmSU~n&ay HV*[IJfYÖو_:Z}vggν{<sϽ/_ilDRƧ.ŒHlsgdp[B
t.}܎BFVƗjP,=TTM('LXU-K7)oڨ֜;],vtޜQ՗nb`u4c HNU%co/a&Hhn&l d@ݞ9> jiIZj[Q-Lj䌆ńa ^>MrjUjUKZoe{\Q-6;Rk~;x֬ TpjO*>sw-U#'dX1o4XH|i@45}Ѱ둫vf!
Uɘ(h}3}bqCƒe({2VD59+XC^Ad+pg+`"jLddz5ɭbd>=FlbKʻ
?xPHCg4[Ύt+ t8lA hUM?a1%ZnF;]#A2G<v͇ʭ윢.eW孭ԝފw"}{1>A9v 4qiaZ#xfGC&sx]u
))f< n0H<CWB (!oð!gXX~߱,q%M;!r7D28M,..>\QCefk^>٦ˌ3Gc_Ǥ}p36/cI%j~_aXFBBk"뎺S QG[}? ?qjM-}KﴓPK
׫mQn*com/gikk/twirk/types/cheer/CheerSize.classS]SP=M4RJ) ~ E((ҊTڙ3:v|
5@:m)*(ǽ SaO~O xy qG X.S8"qY0Ǭǜ Vq0mTLxo&woVk2z0BurO Vm3"2Uae!QbH%S=IkWtFc7ya9iYVfՌ5M3V%ת<.Ms\[a9b1Uroס16ky&WMZ&RUj&9(cKކY4nV'#r:FMӱ SĪ)u#!qnI`;3]JRdk͝=Q[YVxV=UZ ?HNhu}14  .#:`_Gb )?~«ŤWȿ +d,ҿ&H\;egǏJO|rx(GZ:~W(JMc/COӟ|hWk/ny;rL JAOCE)EDe,DryvxZMb9 PK
׫mQi/com/gikk/twirk/types/notice/NoticeBuilder.classP1NP }.iRBKKc2g`+bT@`LR~&()VlH qP=~gϯGA#)spsL']~ V:V:p9 8gń ݡyTc.QIm>MpɋEFuNnʄ/\v0=??̵>!\[BR,SuO9cksBWXk`M"'hO; -8$~]ݪPK
׫mQy6com/gikk/twirk/types/notice/DefaultNoticeBuilder.classTNAzH-A!EJ1$Pi\rw
!|M$&>ekQ.vgvٙ7 x!#AK Yh }z ЂEx(aI# b[VnjytysqtNeXzSʕ䮫!uZC msLjG?2-R'e2.5We=2vVƝ^kި)Ũw` sWlϬsm뭆Wgk-b J Mثl'*
HKyu֏F޵[No" aWp((`VS?>Dƛ1cIx` OsXSA"dѧ$P?&f!l0e1UNשnrWǼ50$ 馼} wP3ת%K7ra2~e1D}PҰ21+ږwbV ')%ҩrUӒuDy|ߖ,C4H2'zƸ(&J`X{;taOgEpx>ϐΐȓ:hQ(%ݯ)!(.^>JlU>Ol T@Y:7xƄ;?PK
׫mQ,2Yo,com/gikk/twirk/types/notice/NoticeImpl.classR]OA=ӯeTT@Ja[5F0>5!%f A҄?xgw(dssϹw?^<ha\ZؑhG"M"MDm
!CgznX'܍@ np8< 3{ƕۆk駡/\KƤ'\:#M*^ Wo^iK
Ga?޽}pQɪ܏Ȏ=xa _}ZȱsiKףD RV[ZVcI61|0& H-ԋ|M+%<STTQS(:j ۷
C肛 yMw#6 /09%t}Xc%4(>!9zVXg)2(XBqnWJaUh'9rV |L[$Nx FxDz'Ck-]?62jaXz8K^$odYZ&i&<Knf7oPK
׫mQ5"(com/gikk/twirk/types/notice/Notice.classmjA uVh`/7O݂`WKe0ΖQzPҨB!I$ KIpKhY}$ '\)Bŭ
~
*#}O|Dh !h˄kzR{frފ'7 [
9 ҸɢNBwt`#=CTM&Q BhI[G?PK
׫mQ%{'com/gikk/twirk/types/AbstractType.class;o>NvvvFԒrF MIJDļt̼tkFҢT̜TFAǤ⒢䒐ʂT=jF\l" *GV 0?)+5YX@,V PK
׫mQq{ 3com/gikk/twirk/types/AbstractTwitchUserFields.classW |d3XD 
RLBUDT@jd)HHl&1ݸ;+Z==Z[M"lmmmko7a}Ou
UF7T=xos>/&>haWvCa 7
IGlᣕ->fa ~kaTOO-l2qψgeswY<nal栅%aC|XV>o |Q/UP_W&)+["m ? ~ GƏc9B{-"s-'µem2୧x[` ,~>.}T4S*L_ݞm7v)T\ܦsSn^a9W8IźIVy>7%Bu:îBhUI;;"d6Qj[G*vm"j3Ž|G_BMr}ҵ#yj{2;KyCC1p>ղ7ѳFTtw|/*SK>%bݓr<dm^GBkU0j.~Vfga8}ilI_<KУc6<?9(׷zn?g8+Kr7{k+7wRn,lnm/]t27=_^OIu8#R$;<noϦ´.Iq[FCF?3j֢h5X{lII}*%0Y6*ōl7Ag ]Dzy1+^By7/1N:w)b\V:nIK5rIՓ/[l1x9~axƯ)ï1 G0-agtm[<Fs~ox\tQ6.&ԫьn֓ƣ骍?&b O4cQ`_x&I1oF?JЗO>QJЗN1 )x)F/.?+6x;A R 6ބ7ptG%66ކkm0h6Ơ>$mR=-&#
ڥ UTJgtجBtLpb ʢFU) ,qlei.&F_xN}IV/w=O2>ڄKIP[WnWJnJY]V^F)<2DzC ݘ%:܅|
ZGTXlw 6:\{y$97AR6:m qe0
͜Ͻ99PgG8f 9\);1K+/򖟝 ]Ѹr:Mlu2ljbb L[/xIC:[62&<٦0JjpSEKppmL6*.M$f#ί^uuw%[[ew7u5olk[gsG׎<0ڗ,rnOxnN{ΪۡIDKch{RJ=ج1GƗ:Ng%@ si2)r1buCAْ0 #p9r[(KD+x$P$
*
D#AXX r"qT¬@6`dGQY_$( >[w7fG~q:1[8z'$ aN4R3tظsGqG# 
T K"ҧŤ_vK>tA ]_k+nF[:
SX4#:e4O9 v>,30gLQw^,:w-y1t^$PňtQ-:4qn&g0CgY+hJ88\<V s n4^4|-洔o
6P"۱6Ux X൤x4z"dJ7_op'^9Au*`p m"yBqVn3׮,r;cPV.4EN%e兵e3?NJmzoॺMPxR] ;ف÷(X*F'9R=`D++Ԏ`c96
Xb hT  u]ͱUV$C0t5)VTɋɉ qC7Xtc8ydVM2ɬd'vyM\g/ I9Ykh"N%t%z_z[i:2 ;h=:p.z Mɬ h-lgQߗ%W殜9_^l^4@5DG.2e_JBG\<EeJkO,^R2{9N:aZ#̨>1"-LL{xO(ranj"cE=3Bf䕄V2AtVEvdȫG6D9L'^+~PK
׫mQ
,Qg
%com/gikk/twirk/types/TagMapImpl.classU[wW$ AhQ[5M%&1("mL2^{ؗ_bWv #a QX3go}f>#@7\̊< \\
=d|*M.n $OmX8Y9y?"XXg"
 %ЭqԚzWT#X-2xΕrCoJ7jqY\V SZXT+:;JVGmP ޻jJ&$PkUe_*[*FzԺWHʚj9Y,myEͰȩf't/Н:ى^p+Y apSpzh]P6FҰ)3u(tRTYl%#NR%OG m3Q*4COQϯZڔUZApEG\PϟjU+bjjRδ3ko9^LZj:oޭ =¡$ ,*LP,.>W$LaRy$<CHCap/𥄯5[/nG؏vneW) MhmP\`Y5F+j~fʹhK
Ew\ؠ3ŶhֈaGۭ0~M0UA7ef-fut?^JF;8ة:9
1aRχ*!"-iY+ޮ9Ԯj\eR[QU]lB-gҗӲ?TRm*ꆵ3:Q=[Vq|-X܊Zh^}ڝZ0_W)ҕ'.%K+Kl"=E%uaܪZfdv 5@< @#/:\Oyxp$i/{yRp~7,D|?~TW{b'G"zy"#pȞn&CEE_؉q110V.щIg5!f`~:0=y7Qz<qQ~:J:FXY#n;mR.'6ccq}-=Ol$7)Ύ^xZi*}1BFtA[])ua̫y1GA`nZC u7Ү +HuCm;J# N&q
|!D#gi]vír}!m>Fka4MpGst'2=`wֱkZN2D:.qҎ[)Em?yЭ ]O xhxHR_]f]-J\tKj!Yf;]y"SK[(<5R SN;i~IPK
׫mQ^d i!com/gikk/twirk/types/TagMap.class}NAF`XQPdԃK4Do a =ʛ&>ei<,ZzzpM+ 0(X3ΐ:ԕ'akܴcC3*1tZQ q9UFjnPw,sɐ̉ڂ;;ag6;c홖vM$=}10ܺ}7| LM:﵄-\ms=ŭ 4|_M#ڪ4T|%mG+*2N )v
(2` 2L-KGʄ7hFV  C\ڧ&"Yd2Y"BFu9!y,x^E,i PK
׫mQf2<com/gikk/twirk/types/clearChat/DefaultClearChatBuilder.classURQ]a,5+?D,DL -ù+8˒[XcNM.hY;;{9~|
`/\hŐŰ #qc 4ܭ$@b㾄NܘA؉YF$̹Ќ%D%,0-7.䕌*fdU/J8 CldFF5<+9gihzv[%ZAg`QR6T^d𽘦)MiϿFÖXʧT#S9U/yn+B&UJ:r#MeV}K93|$)i-ՠ)^ lj39bCgI]ҩ?a1Y2X+Q(iuNL)w'3@@hHF q]B%x,aEFe dt]"lCON
qIdlC5ws" c Zx)?62tK! Z{ ->1r~n@#]sߚ s. gx)$ W:SFC)}ܮ&d+Tm%WMZ5&OճݿF ⥷(%8J} 񣆷VykZỬ4t4%h | xj` [&ꁝ7hz :^plQp#ޠ9.bxYegC4@4# )wf&o@+Z(y/Ն*8>MY ([U৓($G lGMBx*PK
׫mQ#;5com/gikk/twirk/types/clearChat/ClearChatBuilder.classQJ@}cjg=(^*xz^M:ۦ$ſꭠQ(H=y3˛yü=Ǧk>>:qMOLd"̓.免$3*|zݟ%IFF ݪ:3{ߵ ! :zS9Pqƕನ˄NMcu~inQ:6?
tX<^;Թ6GKa9.&|4>M;p>~s83+f\jPK
׫mQ<:2com/gikk/twirk/types/clearChat/ClearChatImpl.classSn@=ġm R(
)EDJF}EdIqʱO<>B:&s<gΙ@
8(šBe*
U22RhK O5<chFWz3vQn~!p+tɭq][bl>jH
u\;R%YNt^1TsŹmSpvcO|~'^?!5x[n)A'ܖOFS9dKq*UԎ֚H2Y*B:nWr8Mb:I{цsv俁|Đ8v[xjb[sXбj%J37?v[gMMZk^捇ypQj:dQ5E1bƏ"Y&B _
K#bl MŹ1*&H~!Bwi]Fk
F! d`Jd.M(
<# {I^"yZ>%^}r/Yr y j y#PYU$ob 9PK
׫mQ$5B.com/gikk/twirk/types/clearChat/ClearChat.classmPMO@}C^yj
F NuSl?0Ũ0oޛ;k( aNf/e|(, ǚD9FvY\\{g)nNk- B;VFUM.kͭy0΍rW(Bd*YO._nwFs_uS'u[':GEMμc PK
׫mQ k`t%com/gikk/twirk/types/TwitchTags.classYwDYdiZM.am Y
&"e$9!lFDKВcq9<P9߽w2wf?.X9zW
T%=>%QD>:3 M F掵oU=+V$r=Fs0+H6,/u$f456$ri[R$a4]!.ɚjb1kMMȇjnMx*d$anv&G1:p1씖frB6)Q̨Vv?ÐW,Ôic0V/K;.C58=I SWu>v5YWFCZ%ѹ,li,ϐuPJ9ӗ{\$eRk7rї\6{.(_!\%_V.Afo͚-6{|ۿ*Y]붱i1:s,ɖ\Wͮ̋;˔QeD<_Xt60V7nrѩ6pha4t}'2ږaE.\8l8KM;Cww{N\56a,^hid;\b~lu_E:~<YW_Ũ%gta$\Kұ= \As;-<õfy|c~L4v
ĨE  );B\" #@+42_<6;~lR̉]~y5<h1>ǯ]h~YT0H]H"i 0p\?pHT;e+R+aO^_>z?H#I#fE /U8sD0 cyeނ6:@Kx?Ft &,,9y/$"__o~T`?~R7-g\?+s~|W% ,{_>uu`EUon"Vw? ٨c''` T0No:Jſtl@-e#:U<͔#*G4=<DE+[YwPK
׫mQ)7com/gikk/twirk/types/hostTarget/HostTargetBuilder.classQJ@}SӤVӋ T<TUtMMI6JʛQl*H0f1`[Z>:?QT*5;Hd"̓.8T)FyiBYV~ӡ*z$*B{3uYM#U2JRp=G,eD*buc( B$-}BǮqU̇vt1a%޸VQ1an}A1*Cյyw PK
׫mQP50com/gikk/twirk/types/hostTarget/HostTarget.classmPN@}CEx+܋7NDQH$MƫY..n%?2Hb<̛{o&ؽF_+p*#܄{68<dn-s[2l/)u%'Ih~?VOv<$tXg$l_\2i̙5[o\]2/Sqj;~|,oSɗ_<(gbi2n]-uWm+& _'PK
׫mQE3 4com/gikk/twirk/types/hostTarget/HostTargetImpl.classS]OA=ӏ][(h#jBRlB7}52A4'4126&"i:̽{6i3X` rYGUfU2eVYMcOTRw]1z7wCg`5[unpdP8,öܞ
|vL xK%lAaCD^3LN8;ɛPG߬Iv$9/a߇Nձu-mB'X 6yI42`AR^ 5Ku.ۂc*5dȶB0tuCņY4QpE s(0/¥fwI~uH>}u!
r$z9Ui0E94K$9#$eLQAT-Z*fi`Ldfa ;T(K,p&F'A9_.p>%tbl#,4bWb3rTPK
׫mQQud>com/gikk/twirk/types/hostTarget/DefaultHostTargetBuilder.classTmWW~.ydYXJE&YU !K&ކdn)砶菪>wxܙ;3;s 3ď g؋sJ; %\VJ2Oe&YecJkg),h(hXP6B0kښ;ޚ)v7%˚ZV
řIx`{5ڏln5x[.F2D4^_p\B/8\3eO}ʹnTgٕTU^=G7`L3%}sV˜z0rHb
OwB=5iZwB$ m*[t/!e!݀vV[a« z*;M (20a O02o2pS-`Qpo1ខ7|LFg+h+em{jާ97)pt'sd MguNt B'ӟgnqJV'Dh^no~tm :% !lYVSUKlϗyE+3?3;L|!QM1lPfRu˾xq8Cu#8J)p caDB@=7z6QZ[⏑| ϑ@rӣ[ȎGr*xDjcx4
}b6B5R7In)A2VCktT
9 0bc5eVϮ%e{5)oGizL4c8A+&rCPy-4،fNǘLXPK
׫mQH=com/gikk/twirk/types/twitchMessage/TwitchMessageBuilder.classQN@ }!iCƘ.dAbS%54A_!QBp~{~pm>>zմń0 SQ<ZyOjz6̽nyanxP9GYLr6|Ƕ!E=&L&fr=Vi!7jꌇ&˪5LMliE:LFRa%_zǕeֆ-|ktQ$;kPK
׫mQ} Dcom/gikk/twirk/types/twitchMessage/DefaultTwitchMessageBuilder.classWYsU:d!! @H@afȰ/#@G@I3i]pDERVIIV+/VY#;==I0 eR}9{{nӵ;?B8TøA<Ã~ !HTqԇ5B:CRix\9XU<<#bQq'<%idY';) *^T񒊗fPPvTH$T<aeT|x3Y5N&TYJYFX)l:nWDIɴeTt-3i3s5wn4_ۛh'7XYG3F.bk*^|
,gpzFA}iN{=z6gdӻXlLy ,L{nU+6zw}:'YShzM9Vn s<s[LnxU30˦:TV6;<9^k ~ivJԖ2Tx(f1'۽Lըt޲MSkgJdwA#ƌxL5f [M) ۱ u mh!`94DФ o- n(K=F68>xy,7{44: E@zlPqFÇBl6*$$D f O4c+fO[ LBY|+Z7VAkQ1û17k)e(,ڕU0CTrg$9tLܕR7ߟs'̻ء1W57J|},*#LLDǑI͎Jh.oY
Z'<hϢ\&a2@hJ (^|wIlm Z2|VuSSɫg2M1.lff78aXmF*.-&67|ph!(C'+urκY9㈺6+C3qfBN?[#͏Ě)Á-xJ":gN
TL,v
Ds2"{<T * '  GEIaU Y#KXf\L""f bu?Шv6Hwy(|LBR0U)]zUp FXwI*.Q)wNj0=<Ǣ`X]U3ߎ(c f <XHxX ܆"!<쵹r]X. m"h;4M3 MJeSf3t`l4w<}<%/8GrnP?N`Z mIuأB!:qT9(CC^,꺀[]ܡZ 2]-Ս}CX``xKp5@a²1s#7o/܇P뫗<v>Z8n`͞`ShOG4~&lg.vx{Xn'zӼw Kv;JfbxTKy|϶;e^EB.jK!ӣE)4w. Ңub..^aJ?)ֹKTZPlX0B5q|N_(Nsp=pPK
ثmQEi :com/gikk/twirk/types/twitchMessage/TwitchMessageImpl.classU[WUN2 R@pkEPA,!vd 7'^kZ.|p髿_Z^>30CΙ|g_? `_<nqZx$$UFtF:5FkRRҌҌ FuF6mAPQ>TP R5-
V@ ctpl]E3Z.]L#[ZJ`kƖgZn,L<Yzs3L
ټ%DcFѢe#ӬI\Gb'266֦aҺ]ЋQ-:(Ju,/ݣ|jn^+{cv1r5*0$l%z褾2VpddV)o
|"J]h lB7Z"#_A>eV4s8xRd *^Iة.?n4 zKڦ@cK/<Β XtTSCxbW8Aak~'֊S^˖ܠWL|JRc‘ՑùUmkˬ,4 ˞] 8wxNIX
ޥF!iq#--[fJ˩U mk%3O<GDtb)x_œxJӼDx⥛^Wqg1pA]ઊ̩Q*>OpO.U,#NCH YYH#|3|N߈s}hE~-'I5f,Ԭ)_ } FN
/Q)l&{ɚiy]}x4o4\[\cX%y5Nc:'BEDa֑v9۱=u,IIZzib?@{ 9z<_陏!{WmclPVd[SFZF-eԱ/mlhb\e /:ZZI8F iNَ$:q7hHÒ% /%j>sډ=JFdvp{} O&_$Ozn'yʓrG<ӞZ7y̓|W&rN | %p7tꯈ4])DQ}9,(:wEsټge VxXe 5+{_+FgGSuρ% 7' `%G@Nzw*Z ־=r[D˹F)E_LI>VeU: 9R?
AW\u.m<l
wߺV^~'F8y6+U{=Mޔ^oPK
׫mQ;/76com/gikk/twirk/types/twitchMessage/TwitchMessage.classmQNAd_W8ML ۰Kf_QfYF5N3pPw&ꭁ|b$c-:ޚX7%?Xl^ e7(<ѕ"{+e Zq^h2f$ZYѱ
.Za mCƲ}+'™Hu,pk]n1n1E ]$[3ݩaZ!.+@RV&JE!/'+ W3,eXZ`&sb4^ifPK
׫mQ{$-Y2com/gikk/twirk/types/roomstate/RoomstateImpl.classTRQ=3@DQ@ a3@ɺI80ɤ&)>@V~w2$R>ݷ{k hU,x^cK- ,в@a"a
$XpCO)-v$<ch.oo-omF#k1!gӡejC[<ks2f7|pyQeiOO%yR(/4-#EEH%9Gj~(eq^j"\ 42vx4㜚n-5݊ ႦTsnd~ŮI j
$ 1[o<ğ*dr:1'%J%fYjKeV=ⵉ,2BfWR4xpbNIxNSXQQ0fU эۈI+@`PCF/Cwm2MB0C[REأm`͍6+$CثzmZ>hdcRZ/II!}TEI$iŦoD5l!<#ؔ@40k%Gߝ:H^_w~B_ _זr}/6Pd1֑ E4X$\WȦ"|Ko=kCftU*1FALPy&6B*yϧ􍶱N4 wq%cMpk}`6x5k68<U~3c߽
Sp{~}):NYr<Zn~I1y<fhLIxf$̠ QGKpv 9g{PK
׫mQ5com/gikk/twirk/types/roomstate/RoomstateBuilder.classQMK@}SӤVŻ/*IǸm>$(+o?%NA{|<޾?ƚ²K
(OUlSeM!KUyZZmY}$c. 3;4TiHTaC
~*F7\:f5"
*">2y} ;,ta~?}!*YN G⯻k2c A•h`M/ u^@Oh<
&$@!gեtPK
׫mQ -.com/gikk/twirk/types/roomstate/Roomstate.classmN0ƿkCC {tRRp\rȹPj <w})NS.m\ki6_nVD*w0|A0$ohҙ*;Cǫ5EP+RG/OQRc 7EQ^=9}zɅ0@?:TN>PK
׫mQ5<com/gikk/twirk/types/roomstate/DefaultRoomstateBuilder.classTNQ.tleD@[M!mCf6?A2~wZ+EN:;ܳ;?~~`z1$BG1J8¼b0EEBxhJrxaE Oz#
M7#Ŋ,=^6ƎZbJ@s"MΫk\g;UsVt9YXej:m.|U)M7'v)H{W63dCïZ.GgS|ƆNVl`b{˄
7Ah#wK% ۈ:SY ^>ɦ47bVLdǩsR>i55Ѱc :ЯcFGa2Lk/tcHcK5\u *>xSN>1m`td_
,߬}}?0 q '37h۲*p5hvgfXƐתWs-0;^BY̖5]NqAοd] vLqO~܏`Ad
Oz@1&n
Ɲ'hV6lrZ E! "
G:$R]>62@ c#,/Y*KSբ3S.ƙ[ K8= (_PK
׫mQkbC3com/gikk/twirk/types/emote/Emote$EmoteIndices.classR[o0=n& `
t0F7L\:&mh꼥N\H@@<]Wp< pjnᆃ6}Sú[6<M;n[BA l?J016`h&X䯣8%˒(݋ruirBPJ-CDF㱖A/Ɇ@[q tL`"~Hb Cvli%;DAA0MD<'$nrEcM?Ld9@.)Zpp=Mv|(fzhdz9=[¿= V?Nh!Nw ϑ']韀+ǨcT?%B)K'K{ v3l.C, x_P?[?26fC|3~֯-Sr5+j.e4~PK
׫mQuU2/&com/gikk/twirk/types/emote/Emote.classOMK@WLZ~=xh=EHŋMeQk(qV[Df+] v,eA_2œTy L0`P}8 1?4ZAFQTXweSS@1Ɓ P&JB#YM2'?O1XUka j; i)"˹w5Cs+:KR`2=.e 
I9ÇFѿNk1`P5 Z`^)!!jB5"kNxcw`ⶪ M)T ?PK
׫mQ],com/gikk/twirk/types/emote/EmoteParser.classSmk@~Lz/}VK\ ~R(VAHxǁ~Kװm 򓊂?%Z͇ٙyv;G𚸎57.n̸$5"gxc"kTQ笧=tF~ sa=Il xQ${|g>HC<raP^P5<bpHa-ďɉoKMC&rW^Sxc_dZ܈#zWFB̛f|8a)K:PF&/sIM)ndƥS(Qr$̾xˋ<OX$DBİ
|hgΞw!'Lo jtB♴;[ŝb{[ j2di=nX}@9^LgG*ivivaNoB4Уs/`Py۟PH
$/ LS4ZfE> Ya#E_!]]/TʸEd%,=BֵZPK
׫mQ[ *com/gikk/twirk/types/emote/EmoteImpl.classVkSU~I$l)M -!PX(֖5hKqIְlb/o u(3ߜw#g>gH~سﹼy<_~pу e3#Y|`.?G
> E:,4eE:#ǗN-0"U Y9@klTlqz2xV2&Jkխ86Jn3zl(F.o;"YWYYJ)$Q+fVK֪N%t\$sܷ}Ըeű^*|N˘,}Z0JCDswJAmȠiDfc4y'1Q-)})k\SzvF/ze. +dm[ɰc{4Oa;xl ՔG#Iaņ2u 4taNљmz?ء3t1+p%RcX\Iܓd|>60)!3J~;D@;bLxl t]6i(onSzQ/뇂3̗))eZ=abyp2UCxSE}CG"/RQ>Iނe.hKmRikx^[6S_%Ml<VDp"̛=1H4=
KvOU<Losf##Dtv%<cȪ h]**̳酂s֒#+}(*߀F߬ұn(K^0N`4^-n7CzG;OgZPM5glOoCAsf xhmM6Y'kj
PR+6.-unr6:_e DIp :\
9\^GsX;:y`W3SֽXev `\d[ul"lp;K$wXJkVQ\wМ-$BUfgcUees͆JCZgom &ݳB ŨZ7p\amp jGv_o5˽C^5¿d/ߦw"nde+wC^P)x{eM6pz8#:it
r?Ctz]$ *C~Ȑ)QU$`/tB0{} #b)Ӊ"!ouHf..6P(VPK
ثmQ 0com/gikk/twirk/types/emote/EmoteParserImpl.classWYtWZFMljR6Dl
ĸ:v*S; i3$:5qXJ l [,iZZ\(K4xo9<g^w]I ܹK qTZ{2`Ḋ^Р!@QKbQCEC O˪5!N
Sb!|
>5|g>.ΪDħPp sB**Uj3oڙ܈8]R:n<ejUH;jl*Y%٩)s5CVW+Nc@JP9k LYUl['NqbVSf옩b1*]*V
4S?\6*O:UD3dUjT|#lNj,2c6k]nKw\^>Tq4T{fwլBδsR(3@0V)SʙlX7P^d]I3F#{jT|Iŗe=faਕ/NͦEjMZ%`vKDrKqYYoq.V4QX^)E}*kV,W,$Ͱ
H&dNv#:n*O)ȉ8?÷(ƜPJ-쬹G`.s֑
'߶i)IYgAWy t| _q+ؼHu:.:o6 ><:^˂=3xE
Q?ut!':"C%<2^cmmSݡ4Uu\U[#v}GeL`tlG2pe44'ZTݪus;5hW\/pCAʯyO7Ĩce<"e.-Gf[~yeMw49fjUw+δ]SS2lY=cqa5g5UΐY;SB(#ߨTd 76\f.Y;h^4(ߌ"a{e2ht]n VkՆ ґ&9rRd[ϒR_ܶQɚYʚnm9_.*lsG(.P6]uLF)h LHr65QÚUtOŊlcGM_>٦9Jj(8iV~I ]MT27~rQe;VuϾ65[Fo ֡/y:d}סqJ' xV
ڋ C=zXqp/$tl3cuZ=uc:0Evd"I:vYPh?Rfn'/JD&ḙ 26Ay?GsL\c;1R ϔvKH&Ajꡌ.h#f۱CBMCNҼA݆ߠ5-B+ r К cu<LJ?bGTd SWWţ\DC*儿}
v(k֬o;Կ~Yi# [Mt,D*#>zDVX?HOt uUƻie{D-qyt`jӁD$@ulA<]F{Q}m3[ǖG0^b0C.r0K{9{c18szFqPljxiuyd/q 9hș#gK1GAbʿ8SnxW9T] {8> Mj(!~*CMm-d 3~m5ڌCQ΄ sc+p;m2yMvIve g"xEdV\Pe\k@*$|d PK
׫mQ.|Qa1com/gikk/twirk/types/privmsg/PrivateMessage.classmJ1ƿU_`."XQVz!$[<>8݃ 7/+s dwZ!NFy17kK]bz4 Lg*l]i |톨[Z JR&>60M|K>69F|@8
^N]! gfl6򭀛YLtWտ=#'ʺ.v{PA_'PK
׫mQ com/gikk/twirk/OutputQueue.classuSSU,,-P()4
IV@%-P+/Kr ۄ Ro;tFgӼ'8w{=sp%qW D`Ki*}$ JusRo^|l` ߄"RC
n&*Ez֝kG̱NnUk=_``׼:fkuZ]߰=Gc8bkUZ
f 0+1D®T4 O @V|+ \+{a`QC7S(LMoW>Î)oOH ގ'
$WGrh!3#+H, d2qK&q;i"OdPU7,XA%_'b
&ncħ2Ϲ~g(+Y6$r˾tcBUjn8<بRNpd(ԁatQ۴P[@0y-;:!+{r\:cQ3#ǘ8)'3@*"{M+|\4]fø U-Ny+L$UB2W84ރ;^Ҝ00iࢁK h\C''a)K+
0qZNx1E"syY -9 6s4eIY8gKS2ϡ̠keu`}Q+dW-F>iq!/ƌ#KIVT$3Hn*<%(Ӈ<a$6*e$N,GT缽-nB1LڲDpFg
_JɨoėLU rC͈'>?PK
׫mQPǓ("com/gikk/twirk/SocketFactory.classT[S@@SC"/XDdL28Mn: |qx8&ǓZ }~qVt bHGý$Ôi W \kUb>7.+fQyH&2#ue0C|E5yd [3+vjWm"׹\te,RlJ%$6o
_STܪnzL(|mxXCĚ0!]۶ojEJW ǒ^oH+s'/v%rf tcUdR\W ޹e?G6D hLF@d= x',*^:ٮ]c@zjqH&j>:ܧdM(j(阇n3,f9:.d; aQãJ 9Kx0:-ݪ0 V*s3iwixBQpjNÜRxaJ2~|&N|;a]2
y66{Zh+A=hD''dɖZfaӜvq.z\/ɂsNuaCW @ ψ9B#i;prI
)\=x44 e7A?}x!OV| "jc?PK
׫mQ1C=P* )com/gikk/twirk/events/TwirkListener.classTKSA% (V1"e*/fL$3Yw^=Q=Æ2Uzf`;`^*=E JfC,[`Ԟi'eJ^ek;f[=;rl#kDfJ8rx$
ܑ
B OOW,A[u=]nspH?&eU⚞Kvqp7=X]BhQƀJ-kýkJ8oCqCY.m ܭ⧶4h%e=#vm5ǭ/;2fBsTMͿ @[AH7jF07S%-Mg΃V[*O4OrŠH[f^SgaQ vy dk05Yug_7ӭClL,.ZB/k\̺/k70ZXH=p=hGpf˘m IÉAE,:˲4sNZaR+k[^l,M^|IT'٥%ʎd1dQMDǞ'kpq-o׏xW/j1&Aq7B't)0= zb@XňMO1N dɮDpᆢ)V4UPW!iES`E7B7P܌:mNs[p[L ](`mgR LVIjd,30EYC1x(h(1?%Bh5Q|P,6="<"Jl ^D7M-Kn^[OPK
׫mQh"com/gikk/twirk/SETTINGS.classuPMO@}cBA@ԃpRcB"TV' ,-mR<xVfߛ73;= Ll!M1BsOx8e8;%zQR<Tc$ݼhJg2` ^( ,"v4i2bAzҞI߷ճ}]w\2=bQ{BO8}i  } )!≚Pcۉ5/FE2fj^+FhUGRXDu4t$lfPK
ثmQ(XNO com/gikk/twirk/Util.classVVUN B JiMm m
vL9[gO_|&̄.!RVfϾ|r_ `?Ǹ X:ẆWu5%:Ȑލ.0L+ W- u`wP=r4eHp<Gdh3Gg`9[-`$|<pԺ.lNПUtJ%K>v$7ˠWǓsA aEŢM-{Ek-*t#P8yaH;A(UJ cNZ ˎmMGd]ek>Hd}9Ô䦘9*"qviWkGuAJ{B 0rbXÊU<bHӞ e+ Bn'O/5Q-ƺ lIcX2Pk
pp3U-F/:dUڦQlU(C^6v!7V!sUnn162G0ۚsEZ!jtm$^2Ä:zo"XQ!!Qebk_c 9fKMK+wᢹzճU:kQt9ĔA\O\[;s~+NjCU߁aCcuq[$C4rti~0 5`-UU
y!1]U0*OT1UK?ixb`je\a԰r-$\t׹-Xi|TA0n{ *ŗ-\džM +m![ێݝ宛wkq4pD2 ~_@/geD;Fw~#&陌I+ ֍"gѱ5=CJ:h. ΎpҺ;FAhQNKM0"4CqD\$.^e #rPVm5/x35dh_427Xm
ᡷ(XGl,J*!WxٛuS o#[{71/PK
׫mQW com/gikk/twirk/InputThread.classVSWmذ,
ĢU!Q?Z(h0A*EkvfjmzNC>t߽ a8s=ݻ?76aqHR$
1i aG1:50Nऎ7uh`x[x[jH1DBgȄltNI9S8"ۮau2N3dܟj=aMOÚ9kڊnx1Bz_%&4h;kMHC>۱OyVeyBCߝV&mG o:%tVr^1]аNeeZ5"
v4Fn),'y'B9&&Y\="µ e#=%ܢt>%
+xI]0[ɔW5pH[b!ƨ[bЖ(4.)w j MtDLlФZm.:ΛP("aUMLcFCl\/j;ѬLL
9Ixh\ &.4FZhWkFÇ&.CWL|䪉OP0bOj3YA4t- _kDA'@SD^[C۳IpET1"xΰ5%бQ! a4Y.%P}J-P6f22貋$j򊗬9B xoH<.=9UoĢUkB'X_ɦt藲s9݅57-0?nҝ^U,LvKZި8_NZv X^!]Q~S6BD^gjy9EWcLAhݔ8B{c{6XhXpXB9"%7USqS3ЂXUXǏz#X9$v`'44T@iJvp_kc{ZJM =l/'v fOI#f V,]w lw8~MH V*"\s-ϕЖꦈ-aubgwy7`vG+cs̲,V,D%Y~mɒػ0c/P>~=@ꄰ mFBBws?R@z^
|^=.^?wmz#q'CqSUs Z/u{۽ghڇ^<c}=@!IBqഎm ̎G >}~MƟЩodԀ
__dA UIBs_PK
׫mQloh2 com/gikk/twirk/TwirkLogger.classU[oG^{{MZIIB/q..4ޱvDO'QUT7gfmbg*UΙsΜo:z'!Y|s3L[R|㎎/r *u|[X}]Yoٺx[qQýU}kU687jgޡFvzp{(X>`ЪIk yj80\٢kv
\mKY"qgz)[W /cJ@Rp4!z RN$ryHɥ!0,dzB񞩋o;\IfaY|MBAގ> 7uT
(28#E^2ΰx{'2,pŐ,2D=m;=֫:xGpucx ?v(g ұE7 ƶ9~Ã!/x{͎\
+{Z8]0j_[VySwCfa(2=, krd9aO؅w4M#L:E=w0s% +c$q14smܳvR 1U?&*`:ޥ9Fy@IP'9RR0.$a~n:<cQ)>HD?0SプHrEJwA<r+@OJfT< (uaha$'WjI/Tte~20=2+ 4iG0ABǪ ?C՘;wCe MY*PK
׫mQ
J
com/gikk/twirk/BotExample.classVsUmr -\BpK H)i$
n6ɶݰ)xWTQ^|sxsδg; i:cfr.w=ٿ}/am8WCHJ°g96CJ%q".B&Kd\|xCB7H7E:ID6\, <
Wa\ )`C+&a;E8i2{PvaݣZ#ݣV XM6\.fVQIKSQB 0&51nOĎ[n|J- OLEU7\NjP|,ںTv@V69 :sF,VKD<C-Lg^L61<Ǽ "JnIt;b"͚y&4WHft*NH)lkc^DELɘ[_`2ŵVWOi\ C2{H$03Iy(cUTTsB!vJ{LJ*F+,]%kL+f3L!\EKn"Iqev[?nfeV,H.[DejSs̖.qS>>leqΆT<N J h;:<0ҰԲ[8'2>g2>28I"Km@xΪ.ymJZ9Wz٘>jKUcڣ%J[ˁXs?$x9p(g~s?]$ɦHE}U宕"" ѽɸeCʿQDckbn*EO,u8>G򛄀fEBY͍<6/\rY^4"uVL;URuzJ|g`GylMZw3tG6NEa;%Iʈj=5ɫI.`0ОHS p:M$d)7Hw}їZ1%riAՑIJTV}iC&u-$>W*:c%z"g8X|kvNCQAU={Jc6g3Uh]f9iB$ 'cπCs'P 6p,f$3q9AJ C3=esXŊYGX9<:29ם|P2aCt/pL_O.tl~-u<}LBz^o-?Xu، DH*OBu[1mĻcXIr (H)(w(,wI'8_p 3B^s{8$u}~jM:BiV!"^qLXC!ԂAJ>z4c{r!񺜶y*)o<M.rBPK
׫mQLǩ
)com/gikk/twirk/enums/CLEARCHAT_MODE.classRmkP~6i[NR#
*kW~4ƚ5M!Mr8Q}GEZ8ssv$
6)aQC*4nt
%u(r%xT76,5^cDc7Y94^%Zc AZoV#ΰv>ֈ{!ky{0ܰa|bubچom^.3笞cM;8Z s e/]]_M>z4c;$h<!\l$eRBENbEQdXXE[XU1,2 i OȯN\'"eO'R~tf-m[T {˼9@>
2"Ra ԙQ`_0w 3E &L<n;oX%D$PXJm g)pKǝsrȎ C<Is@ A0s,.HӒ$Q&QPK
׫mQ:ĝ*com/gikk/twirk/enums/HOSTTARGET_MODE.classRkP=I4ڭjus[i`26fB]1֬ii:-ׁEg(HCr=s___ă,DŪE k
Td+8"#{ iye16wnW?zQWwA?3L{ I A*v&ڛYK3G?p ZYH ߹ ^ۍ,Ӎv8NM oّib`\{o1i\kQu) xP G VM Pp9S+iU,XTqU,*U\ŊyTcM}q0}FubpMv}߯oYk*-ě/,Q(#".:St<?3Rg>Qpl&Ʉ/Tr r|j
:Ba I^,g؀@ UWN9Ok\:'Iv$d AAN! s CZq9pDBDG]nѓp7PK
׫mQr$com/gikk/twirk/enums/SUB_EVENT.classSmOP~ukW
26^T@@mdF%F?,eYu^?/R1 Qs/ H.9O{}sn~ @1`f$W0 k2J2 ʘdHFciOdL1K(N~.zni zNS~QVț/U8֊;ESblHkP$mʎNo bydC۷3(7ledz~klY.H\^@.S޳-͵f:gVNu˭Z glG W*}p4<R8rW-UNhh;u<料i6.3*g/S1g*n#b*,Lb!&>i<nۣ23=Tvz<Mv}1H)f L8`*tS i8,f!{WBfbd|PC* q"Y}\E
7q)2G,.M!zpv Yffrw(LfB
A>DEd5 'CQN9Kp9G 4c0#> 3c0%#)5!,YeuEd;pPK
׫mQc'com/gikk/twirk/enums/NOTICE_EVENT.classVi[~Gt18ubbLډB-а 9 ȉ#bim$m.龸{M7g[{{_O?=jx={=̹x5r>|Q^αc|OT 8!Y6?'` |/L<_bYI/[l~M`JlH<Ǧ+0-p/E6/
\f@J*H 5Gl^|o |


~ @AlL`^lB`AlJM-wܯ#zRu(Iw&dvv
\g82:kČq#<z@AόȨa"h,קaMOXA͢cd
ms,Y)`(61G20 GḺ^4$̲, ]Ȁ($VKk9M-oz[CtyoPh 1FbÑQTYGU%^71z#cF()1B%C3ּՙD&}@ښ#) dsؚ#_L8Vv J{y+Us
%I J:vD Rpw\ĭԸMrL/pc ʺN2߭uk8N?O'"/CيxʋoeUqh
̼ogY2Z03lKrP[}X[oPO*UoC*N!_T+e5y:6a9=ɛT bp,t&o2Nt,35{:*,v,:f`zLjj0+\v[n&cә\^.qTL-9.GEJVrxTL<^]QժWU2â'MEN̑i.M璖͡{OsKStvnv& Ԕ ӲfrB{Rn.rrge:d7-ʊmYe
N֎gN=)Awr4<Ox+ΪNO[<qhlZۖMdbƎi,T)+;ֵ_~װ{WT&|$B*`o,V+k+Iz6lpøNypä3z0a9Oz0aÂ.xx:?~>YkׅRw&#n#.y<Jk56onj^~ Qr^_]x\gV0?vre/ RjRT”!c+{{R~I5EeTFǗeyx7*wQ(K#WQ+zUP-iMIZ+^oN2AFI7&I%$I7KzVF-ߪ$*6M试|V$o*%!yVS;4US]^wKGjnJOK~@.M[7hAɃh+yHrC۠I/VJ~HZ>$aAH~D{F}DrSQm>&G&>˵H6%.jh:3Zь\4QbHB@Vh#AP颓@uj{ j\ &u$]6'sq0A#.L. h P"c .׺lz[vij;G2>/_Ylu#jr߂tEaǰ4ȭtq;,v
tuU*_iFҎne?*УCHArʓ+9Y:Ż6U=t!x/)U+ʿ)1w7߇KPK
׫mQ'w%com/gikk/twirk/enums/EMOTE_SIZE.classSkOA=ݶemaE-Պmp%$[I\h~0KuvKJe34 m9sܙ|2UXc<E:gV +XU)}#qyDABSf2B޲RfTjh}rUkM,lm7f!T0_lhaR<pvAbحW)f~ۏj2$S{:f~UWnl;{UBhj_>u^rpbWVPCfѥ$2݊ 2H ln#%ya$+X>Tn/]?v6943h+5L⹆;iQjX_ %^<O<z:WH2urtklfz]EUZu!bn޺NM07ƍݘC#`p anj+'>bEcHE?]
r'9?p?Ev"Q1O'I#WA"HN#%HP+}I/I(H!UEPp6~@IC=€_0*`,
8IX`ޕ;ڻ# *b a t-⁈sPK
׫mQ3;Z$com/gikk/twirk/enums/USER_TYPE.classSkSa~v +x@MҼ J4.0}pV"[2`8eSSfKM8:9γϹ<9}w xe7᱂ +n!&ʑ'*݄Ld\S1S1WgL0aL*HIpd_n'w$fJjx<< 7ߙp֪zrg7W|Hoe%72x,+#&s|\O,'S|&Gc*K,2.ag:E呄`?D5ә1kVu{(B'FB0s`Q͆YۏnVe%R0& Zrͨ9"u5kfsUB5ӡ7ߚ4K7kF`ŠR*1I#IEox5·Qo5Jɽz.b,aԄ lJ[NCi L(kVC?4 b3&ftն)* ])wP.5JTuuUz[r6GJn pa ,aD xyae0;p8!mH`buY 'O}dη]ɟ"ga3"N&
S15=|# EEZBV/X1,/Ȏj*"WEj:[TC#XyRΙO۪CnzN^9mzE M/:Eg^ӋjzK^zǩqt+4&E 4xVi\0.PK
׫mQL( !com/gikk/twirk/OutputThread.class}VSW ٰ."AAk^b)-Pl`
^t KX ITkV{mg$j;ԙ>}_89 |sΞ]~|߷_Ј4lAo!6O b/b8kCuzCÛxK(QqTl#a! ,qrLb#!5#N\?b>ǘBmB8┊whd"aF]+PP&GcH;f#blR-״TD'z+Yߚ2ms<L6]h'>qJӖui*P+X9j:3.+nwgf(?Y4 s)[(%8b%iq"ɨ?`ؖxmzat]~6
l8s9H
<v{BDޅK)7>׶1FtHI*NK<xڊ 2ZZ* 9H;ەj7]:o4w ~ GS6@GϮ9Ӥ]grLdڎ-AOɣ<l:FmtUG-tQÐ=,Uqtt%ᲂҹPg!x_W6L$`t&6Wd&# 1h)䤣Q"*
V/5mz{u|u|"~*>)XVRWh5g0ϧQu~xˎGx1I7f$$:#Xk͗N`^QAc7YlzyS19- )mrUti9NB[%|.fJjH2یc4,x2Ikyڴ#evHd嫬E[u`H03se8lqNzɉ::ReѨlʜi6lEͺHr̴H(~Íz Mt#]+N)ʹ|4o9R#y*A~X ({9p^&Z8c<ño׸_yK6w
%M7\;n5MiYs\/*PJ$2lચ [sx+S+p\ȕysoQFmsu
2(&"Mo[\}r߮nҊJ
PD+yU/&RV<F ͖ʷA93.poŲO{J/i4xY J=A -8}p.SY6vRF(
{s&WHd/tIzVaX|!#rt `]X|;<+ōBq`e%o jdPj*J?C(PwO1txrFJd$ݵD[WmOd>`u89 <9ceHPl:1HsO_6sZ௠ʳR,S:Cͳ <ԹB E\%O\TikIYRn{~ aF1Ttohx_d^PK
׫mQVUiLK<com/gikk/twirk/commands/CommandExampleBase$CommandType.classSOP<ѭT@NNl!ܒ7̣Yh;mDFQ{e ##.swOYdCq[$L+Hа$r*9nQ
t/뷅ZD8n|3^fx\1Z޴vwՍp[G?rg6HcjF87*u'oF;K$#\hmSծez eӍ篽c$*;|6wzYn3b2=KW]7T:[Yaxrr;-Dn5]zIJG0oEG`(V3̒%_HZbb5CF}G0આID4D >C[.I$zmF88Q w[QJs)@:*td^ <2B$iqCL~s}|cS_8,cg$.cH HJji WpMPu ])Q#⤿Cތ)*DYRrSa~v0Ԝ~q_B'N;$VPK
ثmQ>f2com/gikk/twirk/commands/PrefixCommandExample.classUVUN$ \6`+.c+lj -xCrI]]蟾}&@B9{߾yqa\S0'!E<{a|
B$O HbE&N "DFjX$`!X#,s!>⏹fpm:n ݉i;tQ'K Ώu0ΕZA?>\ltSw3 Wf'JyMXr.yOwua"7nI&bJoA8aDD|I1[n%¬mmk3YOmOYX%9b0ϺhqUȟ-sW!#lqn1\uf^X ctHNqV7K+'Vt ˌ,uȪ-t;ES?'*CE]|0ڒnPd(VwSF)JĉvTW<@Ec
U8p25M膶҉isK&;Wቲ8&NMmAг\I=Ke2 .כ ,Em^{ф.'WYoc_ki)nPsmH.CǸ6*GwŲn tˎx,MY׍7xkd. N]r/a&xM-KK٪V78:zmДcӸ0.m_
:ax8:_=_FD8$(RGs&@3dh.@'nf ' L|1vLpEC.Z1 t3?G)[6I5q~z'#J_p+;:^"᩿P&'z譢U\"+'#]3Y? `C gn"ne:shPUdбZ`1G)i{!ar͒[A0RZPK
׫mQ;53com/gikk/twirk/commands/PatternCommandExample.classU[S@-MZТr-BQKa-u|bB4e_)f|Ϧ
ٜw={6O<۸#CdqdDƑT weLc&U= ʒ [}OW-ݮc4FFCgTMDDM33!*C$ߪqDѴy掦o[\x ݪ)`2.z\Ҧn\{w|'/כ$ &_i2nJdڛ.w*3-V'qBv骛-u@]i9Μ8.}&?W3v)0u̯dXG]n׸0yNC"7;J wg-VpXj;_1 u=Q
aNA_A/
8ѐ`Ϩ<ӠƛP0N]ϝ<LiT$#j[rjD~V~TZ*/3̟gQN\r ˅͢0Out#
`:kˍV1F!P!t}@cjD2eؗPn+Ÿ|bb?~
eR'!LMEo342#|<Ts)_ET"Inqn+wnoE=LUr>de$\( F<} (g0N[?/PK
׫mQk۝;? 0com/gikk/twirk/commands/CommandExampleBase.classVSgmdUD@&0xD,AJְl/kOM?tFšq:NH[ux}9A~{~@)Ǡ NpJqgXQK0$DJqRH:0 i[YYK\l9?1 Șq2.xAB IUcBVtfFSei^ն5Ӑ:Fr5UBi\O3i]kJ5mFq#I}t4bhˊ"jPٔ_󂤅ei51='ijbSK[#3z۩ۥ&5~k{43 tCɥ4_J;PS{cD!<
D3Nr1+)hxV$gilG Y
⅛-lZ4K35SBFAy  [ʦtNL.@^jb4f̝~QKdb%5`fA*BŌVP0"^S뮍Z̳3-u֒ZY]iIޝ \tH^jaqkon [̄Dz0lZ
<nYAt*EV*:d"^W.)x\'-xmtxGxO@-c\V H([O.R9PО70%^pUB~C iqύq.>1GuS"&іk@(a6#w}HswH4ߙˆݗsڎr{xB 3ݙqr@Z*St=dBEF~ 0Nu>\Vcj*GAXl_nQ@Z0(`6Z=ڄvew#VM E&JjUuf\;ӌ3P%:<a! .1W [qvx0O<zJ4v.Ốuw
s߁'|7mUnFJ OXv< 8*O}IYo7!K)NPNAi=o4I񸆋\!F_7Fp~Ī9 SJ\W?I&g~Dk1ݭujb_n(#m"mf;3LN&^L Jpk[t;t9pS&Ȕ(pg› n'}51 ^+ylbi(yZG^du \?祖#6,;9{zsl7aufkbm^Vz%49[ 8VX}ٌ;Ȅ9CH.Q`bX02_vJwYErq;2্ {PK
׫mQdJKHAcom/gikk/twirk/Twirk.class; xTEU=3y/.n! CH.&dd&LQ{=vW\e`o\cuXT92MwuuUuuuwUu?|tĕO$.N.\RaUjTi$\i&lfL D\ jcÐ!/C aǐJC u2u u1t*C1t:Cc d,fh=C0t.C1t>C0t!C1tXa>K
3r+5`ЉW&Ux5QV+U#RZ70xKs}†Tي*ަ nbwx»̘0tiV>+{T$\PpgKyaa*>IPo
1Lħi++
>|w+(O_
čz _QL
xEŽ*k**ɭmQqT|_*~c$?K }W\7*OoUNUA*O*A6iB0aJfaa( %I"!kHC\$A"$.2$2&a"Ib(.FhcH=ab\/&Й.&qo69\*"O~+il9~N{i. \9V `9rRngbxnCY5Z[k]֢z.+d/ Lv[|N{#¨h@{hU'HGj'ҲAK<{,f9Rb 8I0.GHrK4 X].ύꤹ8EuE\0-:s6.=LƦ=lpz>hNpJ|>{W1Mcthsc̍ ̙kq/7(BVޘ} Iz.)p;{[NuJ*v(DXTBZ@ ˙[NhQ4IJdL-i*Äė\0g^lN*Xn-MKfFDpT҉7E͎-1tVNNrH^alyD7DdW'cI9=Q6aJ)edP.;hw!RO m=t";:i0q!زc9Kߕ^B{mWo_v:vhqCb%}UAqF9icQ=d=P,{ni^9E>D1#mrEBsyɃvFus_yAi9}Xr]h5у"
&Fp4
y
d;V}E1};5q@LsѼ}6oW ($xݍ6'gERlpy=~EQ"HApSc6]e%(U - J1U1 Mv+y3΀ut阛y6+塙C&>P4Bp"F3[BwJ&xE8b@#u"Cq&cD"4_3s&@KqŒfa0bBE{yX2섨AbcELQTELStEPLEYb|v)-'}lӞs6֑_b21W^ ^5.^74xmx"SLN}.iEv 7E\q4(b&5x
q <3\<xy(Me|PM,|
i8X MTJ 4Q%5|qu| h^,8b?O8A4h3<0<~
9Xg8A_F55'K+PJSF/`(Qkj˗V-iDq`[qZ<BLTXv« @Ⴧ_Et¡F@Xy}R
^ހpz69 CǍ`kmNѸs*©&87*g-gǦ' C5 ]~lyqL_XXfT5,\:sfl"Z45q1]qҵҭ6Exx\uyMCd
mZ5t Fi", DLNFNCB[ 9l;` 8mU6mM^6;"Ca'SJ hRȊ dL)֒Ezl嵥$}Фi[IȲk5NP*I'&ءN{ީSi8]g~<b5nYye}8[gs8aD?t&9a3wI>'#4ru(ɠRSRWGN$/o*/]L˒ZSmlbBXo."bIAј&O&'?YKC^fUZRc-;Vǝ@gQys 0 75q %jʫT؝\.]4q ??0WV/c%K+JjKejj)TUח}"`+á`Ǣڅe,`ӴӸ9SbO OĵV:MY\1č&E̍[4qM1whNq"fMUܣ{E[}4-z;4S<]q+M<*nM<!=fdx"WZ-Ό0wq 2B09:FlB>pSLoa@4qRv5Rˁ'# '7fII\pvO<εD<7eN$̜hy?A#ښ k9#*t[I4_e3`Q aF<a𖖢߁69xPK sxq^4ѯd5il<a2*_P!ē5~Qmq7/<:~q6j"A9e+HiDH2&?%%`@j&{# P\ࢥrR^mzo& Kߜ'LprA?Q4iTͅ^M 'bv~ 9N>BkH`$FdT9GVOySe3E'j(8XwRxDfÂFD<VʺNr*h5m?' NETч n$ya.#cQFt#&!1;<و8g`>CW2clΨnrw[cBO8"r9k:tmGq ac81m^O+"NO b_e,@j Ķhv_)j78/_hb|>ηtHԳq䇉ӭS#Zaf6'vD/J./,pRlb|!?^suViGWhjY{S΀3;~;D^O3)(Yxy!,/џ6b* $vvpo;X_"4}BKߎ=
O?S'MJo)wxN%og<Ź7a=ᯎ2#Sv+ rΊX<5 ҷ?򮈑*@'c&J>0z84U\ixRN$,itnȗ]`
'`Î3 NO;T 0"%2"~ը_3 Y omxGw={>?^t$>Od)|& Y _kFoe|/dPCH^ f 퀹n\0b7XHBjvH+Ij; RzmnH:2 \醡\놬ܼ #  cuXux'tDI\gwC׹ݐu~7p] E\O)TjZ7L'pFMpf+~*ID aPCxuP0@94vXMe+7t/\p%a6n? 
:1XGi1~G|ɇG?-@Ï<PB4L ffշʎKA"%%b" ⬘dbJz`N I66$QC %IJb'w\QzhjgQ~ y PA#@iClrh8HΈ!SL5)c{/[" 9)4줐!~`eуmv?`E tisHTD>*h:!ᵘhc1c&*fk:5T< 40R;_ITtt6R$^}E4\ 3WC-P?LE IJXk~HJ82A3D HIƍ fkC\6Y,&Pw<U#=<%E0~C#B{hA Ȝ@LrVc;@xC3 V<fT)XzoӢ :WX!uFFNVڰr<Ɍ@eH?6b*=PEbvgr6)jsaFp[
\εs`XN DC, -J6PXNBrC8Q8`'6ЬkJ*jZ6 G`*"3 82Em8f((}Scǂl5N5 a>"v
43q r <oK9K5%2~VZ#IrO 5s0*T붳dު <aG4) XyAck2P.HE0+`0V(&%j k `1C. m2`Mg:)'E"CX0sÊDE(i WNH&Z j7 (w"[{8EK_NXmna7%ʹw.hm}c휡53/:ĭN?~ am7":7p]pO`'u.O^nL9u =͔gTk}&0W>=p& n%eEBGDȦ:&4#͙vϦd=dσxL i.:\F<#bu DSy 'Sf,3 v=8GȌOqny(z|4TiLF&Uybޜ~ 6mp;q?x545І r!a#HMp'6F'j
&V~`S|Zhˍ#~)dy9&C^Z-tF,OF0tk1rbWDeWNqr`*x:)Q>-/҆9dW"ֈIΎÀtvYAgWl2Z{q[̄,:[K>BE]7!A]+Χ}#>hIXQ]^Υa”[oW|M6L{.?gW!k\%O=px43a~}l?ljYIԾ^7*ܾ7*/F>#U2%_$-Ur4FX*Y&XȈY"SF[$"'5qD KF$BIMp%%ӯ~go'^X@ M`to'o^N4:vX1VXRYYNW&ʱ|rޥs{̻ +z1o58$'6hN"DluΊoxjomDCsnA)DoHŐ!ŚeRXj&Ow5ءk9` {
cuÐA-elMp ˑ1#m9۠5xР{k@>q&~/<YIʳn fΔS9'`<y$|V ?oe1cUq2&Zuъo#N}b+nmmx+xᗦd46e7)0-GS=dZF CiKt0iH4=$="LωT^fNAdMb9A 3,h1|a^$FQ*1ּ\3wb<1|1_#r<"(0?.bc1m>(-V1ǒ, %X<Qj)-E!*90RZ=8yLn-QB(,
Tل{13%pn!Xu)p.&n}
6Q8p߅p{ w4(H89є̕PS]Ar({w pQ8|. 銡Xf,Cn!?X]TXgb̟q4_3'
t =!Z
KF̔G )tݕч
<U*%06 % ~!UQս59.NĵAI:APߛ~I#F i
.9ДW`?5V-zx^vHFɿ)/ul<gsX eyñ!AzSD}xkr6?PK
٫mQMETA-INF/maven/PK
٫mQMETA-INF/maven/com.gikk/PK
٫mQMETA-INF/maven/com.gikk/twirc/PK
ӫmQ]F4`%META-INF/maven/com.gikk/twirc/pom.xmlW[O0~_4*&&Mm.MKbGC˿߉\tM<%|>N\jԒ]Klmm` )/y}v.<r3Eo[plno~‚GBe
gyp8JJ>+BL慑Q>KPAt8mS[iU_$U]5ڊ{Zحizy g=Y_ J6\Ǭ %/޽y2ujeXTFX-s'~N!d#l*f"ebc= $$U XAlstY<FU:kʯ+,1Lgʗ[Wt%s&ZW`. g? O->ͨ|(vLhL.)!$kĬ }ʟW?/N]O>yᏜ\8K,,`Dс A6 ^G5Xۛ+?M"x˛R%Ūn4-Ӧϓ }a~  Bv}U]3QpX0}qk16,A~vohIo>0#4S+"x{#|w<!7 8ayk^$& iRIGzPZZ C~n*cUvxab@>*{E b]f!?Ngw}8yeh6ꙴv'xs vHV ݖc3t
V_/JGGr{u,WFbiki% d:~=M%ԀqIt>1I>X0hʿړPK
ثmQl scb,META-INF/maven/com.gikk/twirc/pom.propertiesSvOK-J,IMQHTM,KRv+T/S04V02262P qV0202*K-*ϳ533J//-LMKJ,*LKL.g%sPK
٫mQ AMETA-INF/PK
ثmQ_Zn'META-INF/MANIFEST.MFPK
׫mQAcom/PK
׫mQ Acom/gikk/PK
ثmQAcom/gikk/twirk/PK
׫mQA=com/gikk/twirk/types/PK
׫mQ Apcom/gikk/twirk/types/usernotice/PK
׫mQ(Acom/gikk/twirk/types/usernotice/subtype/PK
׫mQAcom/gikk/twirk/types/users/PK
׫mQA-com/gikk/twirk/types/mode/PK
׫mQAecom/gikk/twirk/types/reconnect/PK
׫mQAcom/gikk/twirk/types/cheer/PK
׫mQAcom/gikk/twirk/types/notice/PK
׫mQAcom/gikk/twirk/types/clearChat/PK
׫mQ ARcom/gikk/twirk/types/hostTarget/PK
ثmQ#Acom/gikk/twirk/types/twitchMessage/PK
׫mQAcom/gikk/twirk/types/roomstate/PK
ثmQAcom/gikk/twirk/types/emote/PK
׫mQAGcom/gikk/twirk/types/privmsg/PK
׫mQAcom/gikk/twirk/events/PK
׫mQAcom/gikk/twirk/enums/PK
ثmQAcom/gikk/twirk/commands/PK
׫mQh* I%!com/gikk/twirk/TwirkBuilder.classPK
׫mQ pU!com/gikk/twirk/BotExample$1.classPK
׫mQR[xd ._com/gikk/twirk/TwirkMaintainanceListener.classPK
׫mQ`(/com/gikk/twirk/types/AbstractEmoteMessage.classPK
׫mQ7C~ >dcom/gikk/twirk/types/usernotice/DefaultUsernoticeBuilder.classPK
׫mQ=6com/gikk/twirk/types/usernotice/SubscriptionImpl.classPK
׫mQ$$78"com/gikk/twirk/types/usernotice/UsernoticeBuilder.classPK
׫mQ;Q:#com/gikk/twirk/types/usernotice/SubscriptionGiftImpl.classPK
׫mQ˙ 4%com/gikk/twirk/types/usernotice/subtype/Ritual.classPK
׫mQ$ 97:&com/gikk/twirk/types/usernotice/subtype/Subscription.classPK
׫mQ c>(com/gikk/twirk/types/usernotice/subtype/SubscriptionGift.classPK
׫mQx2D)com/gikk/twirk/types/usernotice/subtype/Raid.classPK
׫mQxqY>O*com/gikk/twirk/types/usernotice/subtype/SubscriptionPlan.classPK
׫mQ|>L<0s.com/gikk/twirk/types/usernotice/RitualImpl.classPK
׫mQUY. 0com/gikk/twirk/types/usernotice/RaidImpl.classPK
׫mQ9f 42com/gikk/twirk/types/usernotice/UsernoticeImpl.classPK
׫mQ>'= 06com/gikk/twirk/types/usernotice/TypeParser.classPK
׫mQFE<<0=<com/gikk/twirk/types/usernotice/Usernotice.classPK
׫mQKٞn8=com/gikk/twirk/types/users/DefaultUserstateBuilder.classPK
׫mQgT4*?com/gikk/twirk/types/users/Userstate.classPK
׫mQ^+@com/gikk/twirk/types/users/TwitchUser.classPK
׫mQkId/_Bcom/gikk/twirk/types/users/TwitchUserImpl.classPK
׫mQjR.Ecom/gikk/twirk/types/users/UserstateImpl.classPK
׫mQDu9Hcom/gikk/twirk/types/users/DefaultTwitchUserBuilder.classPK
׫mQ.2Jcom/gikk/twirk/types/users/TwitchUserBuilder.classPK
׫mQُ1Kcom/gikk/twirk/types/users/UserstateBuilder.classPK
׫mQ!>(0Mcom/gikk/twirk/types/mode/ModeImpl.classPK
׫mQY5r/iOcom/gikk/twirk/types/mode/Mode$MODE_EVENT.classPK
׫mQq$ +Qcom/gikk/twirk/types/mode/ModeBuilder.classPK
׫mQzDc$3Scom/gikk/twirk/types/mode/Mode.classPK
׫mQ 2YTcom/gikk/twirk/types/mode/DefaultModeBuilder.classPK
׫mQAv2{Wcom/gikk/twirk/types/reconnect/ReconnectImpl.classPK
׫mQ(l.Xcom/gikk/twirk/types/reconnect/Reconnect.classPK
׫mQm5kYcom/gikk/twirk/types/reconnect/ReconnectBuilder.classPK
׫mQE)I<Zcom/gikk/twirk/types/reconnect/DefaultReconnectBuilder.classPK
׫mQY *2\com/gikk/twirk/types/cheer/CheerImpl.classPK
׫mQ3Z&`com/gikk/twirk/types/cheer/Cheer.classPK
׫mQM u}*acom/gikk/twirk/types/cheer/CheerType.classPK
׫mQߑ:x+dcom/gikk/twirk/types/cheer/CheerTheme.classPK
׫mQ"y`,igcom/gikk/twirk/types/cheer/CheerParser.classPK
׫mQn*ukcom/gikk/twirk/types/cheer/CheerSize.classPK
׫mQi/`ncom/gikk/twirk/types/notice/NoticeBuilder.classPK
׫mQy6ocom/gikk/twirk/types/notice/DefaultNoticeBuilder.classPK
׫mQ,2Yo,rcom/gikk/twirk/types/notice/NoticeImpl.classPK
׫mQ5"(tcom/gikk/twirk/types/notice/Notice.classPK
׫mQ%{'ucom/gikk/twirk/types/AbstractType.classPK
׫mQq{ 3vcom/gikk/twirk/types/AbstractTwitchUserFields.classPK
׫mQ
,Qg
%com/gikk/twirk/types/TagMapImpl.classPK
׫mQ^d i!@com/gikk/twirk/types/TagMap.classPK
׫mQf2<com/gikk/twirk/types/clearChat/DefaultClearChatBuilder.classPK
׫mQ#;5tcom/gikk/twirk/types/clearChat/ClearChatBuilder.classPK
׫mQ<:2Όcom/gikk/twirk/types/clearChat/ClearChatImpl.classPK
׫mQ$5B.Xcom/gikk/twirk/types/clearChat/ClearChat.classPK
׫mQ k`t%com/gikk/twirk/types/TwitchTags.classPK
׫mQ)70com/gikk/twirk/types/hostTarget/HostTargetBuilder.classPK
׫mQP50com/gikk/twirk/types/hostTarget/HostTarget.classPK
׫mQE3 4com/gikk/twirk/types/hostTarget/HostTargetImpl.classPK
׫mQQud>/com/gikk/twirk/types/hostTarget/DefaultHostTargetBuilder.classPK
׫mQH=com/gikk/twirk/types/twitchMessage/TwitchMessageBuilder.classPK
׫mQ} DMcom/gikk/twirk/types/twitchMessage/DefaultTwitchMessageBuilder.classPK
ثmQEi :,com/gikk/twirk/types/twitchMessage/TwitchMessageImpl.classPK
׫mQ;/76com/gikk/twirk/types/twitchMessage/TwitchMessage.classPK
׫mQ{$-Y2com/gikk/twirk/types/roomstate/RoomstateImpl.classPK
׫mQ5com/gikk/twirk/types/roomstate/RoomstateBuilder.classPK
׫mQ -.com/gikk/twirk/types/roomstate/Roomstate.classPK
׫mQ5<@com/gikk/twirk/types/roomstate/DefaultRoomstateBuilder.classPK
׫mQkbC3;com/gikk/twirk/types/emote/Emote$EmoteIndices.classPK
׫mQuU2/&lcom/gikk/twirk/types/emote/Emote.classPK
׫mQ],com/gikk/twirk/types/emote/EmoteParser.classPK
׫mQ[ *com/gikk/twirk/types/emote/EmoteImpl.classPK
ثmQ 0Ycom/gikk/twirk/types/emote/EmoteParserImpl.classPK
׫mQ.|Qa1Gcom/gikk/twirk/types/privmsg/PrivateMessage.classPK
׫mQ com/gikk/twirk/OutputQueue.classPK
׫mQPǓ("xcom/gikk/twirk/SocketFactory.classPK
׫mQ1C=P* )Kcom/gikk/twirk/events/TwirkListener.classPK
׫mQh"com/gikk/twirk/SETTINGS.classPK
ثmQ(XNO ?com/gikk/twirk/Util.classPK
׫mQW com/gikk/twirk/InputThread.classPK
׫mQloh2 Zcom/gikk/twirk/TwirkLogger.classPK
׫mQ
J
com/gikk/twirk/BotExample.classPK
׫mQLǩ
)com/gikk/twirk/enums/CLEARCHAT_MODE.classPK
׫mQ:ĝ*acom/gikk/twirk/enums/HOSTTARGET_MODE.classPK
׫mQr$com/gikk/twirk/enums/SUB_EVENT.classPK
׫mQc'com/gikk/twirk/enums/NOTICE_EVENT.classPK
׫mQ'w%ocom/gikk/twirk/enums/EMOTE_SIZE.classPK
׫mQ3;Z$)com/gikk/twirk/enums/USER_TYPE.classPK
׫mQL( !Rcom/gikk/twirk/OutputThread.classPK
׫mQVUiLK<com/gikk/twirk/commands/CommandExampleBase$CommandType.classPK
ثmQ>f28com/gikk/twirk/commands/PrefixCommandExample.classPK
׫mQ;53 com/gikk/twirk/commands/PatternCommandExample.classPK
׫mQk۝;? 0com/gikk/twirk/commands/CommandExampleBase.classPK
׫mQdJKHAcom/gikk/twirk/Twirk.classPK
٫mQH1META-INF/maven/PK
٫mQu1META-INF/maven/com.gikk/PK
٫mQ1META-INF/maven/com.gikk/twirc/PK
ӫmQ]F4`%1META-INF/maven/com.gikk/twirc/pom.xmlPK
ثmQl scb,5META-INF/maven/com.gikk/twirc/pom.propertiesPKww(76
PK
GaR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
GaR META-INF/PK
GaRconnect/PK
GaR connect/chat/PK
GaRMETA-INF/maven/PK
GaRMETA-INF/maven/com.stream-pi/PK
GaR1META-INF/maven/com.stream-pi/twitch-chat-connect/PK
GaRdmodule-info.classUON1=W
@vcڐ0эIcLБw:Ҧqk  GW&iBfL 85yZ]B#VC58"c.zRDZ)Opn\Ht6Y֛qy.'ԓ&Lz۔?pWq [‘jOdB&DZQLu#zJcXiTwj@X-UWhplr.V!v-}>PKdPK
GaRMupB%connect/TwitchChatConnectAction.classW[-`$Ăa q{M-$i\#d0*B`KiKiAk]uww&N&"H4=~} ӧ}{Ǽ}^p 1ēf>%to 3A3lk"'0ބ!t ȟo;'R\dI"j}!k
!>| i|, >لO!D>|6 ^Nf#Db(ΎGHkl):3攌ci܀i3ITx:Mdž|Q- Kͫ1t f+vN5T%ge`qLT7 9#>;)!afŒjeٌr\f8O68p(Ej 5(%$x\;̄eUTwmZlA,iAKe EMa4[{-z_2Ts9նjxZCCsj"$jkS5.* h24<Nj4FPrΙKCg 3ySs^ H3x
bgU׀0d:42͏P,Y9uXM8)/'Ҝf
\,U|"qܼ9tݱX^E|/;u%GӕE^P&'7 ķh?(sS(s+7)@/^Ʒ}[3 sܟ\%6yD|pjǥ&6OAjqRC}x>Kjqrt?Ïy;|y_Wr#=4mSֈ ~*m4rT`ݍY~;0!!&~)"E(XK"~[Ȫ<ծVڳ&6̈Ib%tF94wḊ(Sj✢Ibeh;^Jg̨qcYs̐ sIVj9rɦzWhY'P?߉=^y?-QcRM 3ty1]p
jY%-\"T 9.񬗊E]e*;ֲf^qIsKeFU1D\
ت&x.L+fZ-lmF5g9ixĞ`?,WDSp2!.Gé[ɚU/i5OuF
)?~r˳+8q= \$_3ًy'qjDtʸ'9.l˘'YVҽ[M1Y
Y3E>Rv~Ng.9cߦJ1,0#O3m54րWjevu1Uǜltt^/M޸SY_W+x]ZW| [ٽ}h:A4 =>d^
NG6xs2=<~q,Mj5MdɅLfR{5 i=*oqLP*5c )l *L|ȯUCx7o=Z~l"3lFnnQu9X.>MiUD;!%h4!Y4@HueG2vEhH2hj_A$BsSH#/=StõxB4>졷І K ,1
OJÂ8) A8\cFǔy`O**=TިYFWs=XLz1qcuTC\0ZsG fE8Q BЎ@eaGэazyoYs=UA"etWO7BS ۫c_S}u2z8rNZhX/!R1{*[[0A@d(Y
*ܖ ".
(UNl Z&+漲Z坰;ULoZj(}))&D
2=1w77yUI{Dni<E(gwOP R S͌j/.\߃2V"p7cݕIׯ:뾗˴x'?PKMupBPK
GaRh$(connect/chat/TwitchChatCredentials.classRN@=C хa.l|D7$&& aHImoX(mm}s3o/2b] U ֐-_ sו~A ͋a[x%١ j)!wbvxʠ= $qmWv7}wyߡH oG~TáMԵ?PUZ~ޘmBBjg.+o yfGV~D[NБAx!+& MAg}Ra9ܽ.#fأ_/#rΓ4ɳH3ٝg22'
$Q"c夹gdkP"ʃ/'d&4iJTɤ+q*"e]PKh$PK
GaRnŏ8connect/chat/TwitchChatCredentials$ChatCredentials.classj@I,׉9 ۅ
B! 酡`ܯ^GYN_B/}ٍIR[  ]ޙe]W֛k\sK5>fp#>ӓAt)CD*OCP> m(Ȅ;; %)}QJĝ' c/(h?LU`,$<KJ릜<M6sZwzN?{rSo=fq >Ks[U?-A"(<z(Pprq +M D3hL4;zIS6fZ&'L<` Z*Y^o7R:'6[dڏkifg2'*.*9HU$EP%E$M4eX~WQPKnŏPK
uaR^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
GaRyI#]b?META-INF/maven/com.stream-pi/twitch-chat-connect/pom.properties ; НS8`H
@x{(SAW9i8u|e)GhhJPX%H<A(rJLn-4`PKyI#]bPKGaR4AW_META-INF/MANIFEST.MFPK
GaR AMETA-INF/PK
GaRAconnect/PK
GaR Aconnect/chat/PK
GaRAMETA-INF/maven/PK
GaRA>META-INF/maven/com.stream-pi/PK
GaR1AyMETA-INF/maven/com.stream-pi/twitch-chat-connect/PKGaRdmodule-info.classPKGaRMupB%connect/TwitchChatConnectAction.classPKGaRh$( connect/chat/TwitchChatCredentials.classPKGaRnŏ8Y connect/chat/TwitchChatCredentials$ChatCredentials.classPKuaR^q8oMETA-INF/maven/com.stream-pi/twitch-chat-connect/pom.xmlPKGaRyI#]b?FMETA-INF/maven/com.stream-pi/twitch-chat-connect/pom.propertiesPK 
PK
LaR4AW_META-INF/MANIFEST.MFMLK-. K-*ϳR03r.JM,IMuRp,HLHUM,KS033r*)f$ADRtR&3PK4AW_PK
LaR META-INF/PK
LaRsendchannelmsg/PK
LaRMETA-INF/maven/PK
LaRMETA-INF/maven/com.stream-pi/PK
LaR5META-INF/maven/com.stream-pi/twitch-send-channel-msg/PK
LaRVGO; module-info.classmNN0ДGy qig\ʽ2i I\N{8|I(kyk¡)rtԌD]1栒:Fp@{e` GRҤܺ\t4-SnU6Se*IDHMFh3~p:!73M8o4~t\p ѯ!ZeESBPţ5(kD՝oaY-^1]hU,]VEwPKVGO; PK
LaR[.-sendchannelmsg/SendChannelMessageAction.classW֒#0`-VB)` iܵ^HHڴIB6-=hSh"ФWJ4z|+۲̼ffko؆E0,Ƙsɇ~\Du01)zKFA0:8p#XbgD6s͓a| !!b 0>V'EX|.OBy1|V4/DЂE:r}>//0*|'pA4_ F\ߒm +u t<3,!7Qji\e:jCQ$,_ ޟ>Kܳ=A5Io&9(ZTK7uw@kې`r} 'G5{P54aQ!] yݑhf6WMS3&I29;I}UlW(\_P'cgښ:9RГ'7 TrvPlJlTB\F+9jվ!2a3ZVBvNBSڳ]J[j#;njnRKvPGp"&i+v3BT$]hrƋf&ՂJX; d{{I˶{vA14 1ODeGԢ&4bo4?b|o%G$mv@YV)b`/J0\2%wO
- kL5 V}+<5&^(':[pv&Y=n89'Ai'u\:vsKhj<"$
~ ?gV@&KeaRɯy8[M
^2J
qU0TV588yTΊ
F11똞+ڪp-V4wTGeZf"
17np¶Y2~5\JV~-7
~)=ޔ1YVh-ğo+3QpX"aٞVL7V26[SVL MNTzTLͩ)qNq/B9f%wU62M˞G$?u_p9Gs O\THlzRCNifE5%sT5ezR֑Z6/^1~ZnBqH3
-y>r5?8Uacyj'vW{L~םNQ mL-*x-y!0i/UYަkԻӅ5nT49͟vo7pN1?vcǎ2tx.wO䭳88,UVړ?6wV'xps=^7 *.;,0UШ'$,#]嵽ڼxy֎SխnΩ|WUGe,EBR6nqRs(cXVa'!UF褐W Zv3 <֔G%jQpꆃ4"%ǣJ ]Sl7 v9X4MԾmX$b?9_zpƳeh? Wd_1ѥ%,k6ƬVWh3WU\MxuDsi0c)6ҼMPlA;ZMF]H1ߘ zip;8Q |3IfhoNKm+B:E,C\y*KX{Mװn8z_4v맱/Km,aS {J`Z+G+mlH_A("6 z*>D 7İ#}i1I<;elӇ8%)+o0 :IOGI8w: 1-PB-`AD r 8A.Zt!pd<_
e,P C\_yx Z'B(pI՟i4&E;hnzKm,[CkCi
/ӗu jTIX2,3ryN&<8vA#zByaq:ڙOp.H\fXC Jz"i/
KѰ"88 vE*oJz%dFT!%1O1UPK[.PK
XaRh ' <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{PKh ' PK
LaRQLbfCMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.properties ʱ
0 н_QpnP7q>"F[iis{Zv)HO;k)'hJ4X5nH^Q)åkYzPKQLbfPKLaR4AW_META-INF/MANIFEST.MFPK
LaR AMETA-INF/PK
LaRAsendchannelmsg/PK
LaRAMETA-INF/maven/PK
LaRAMETA-INF/maven/com.stream-pi/PK
LaR5AUMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/PKLaRVGO; module-info.classPKLaR[.-sendchannelmsg/SendChannelMessageAction.classPKXaRh ' < META-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.xmlPKLaRQLbfCMETA-INF/maven/com.stream-pi/twitch-send-channel-msg/pom.propertiesPK

M README.md
+19 −0
# Stream-Pi Essential Actions
# Stream-Pi Essential Actions
Set of trusted, pre-bundled actions and integrations for Stream-Pi using the [Stream-Pi Action API](https://github.com/stream-pi/actionapi).
Set of trusted, pre-bundled actions and integrations for Stream-Pi using the [Stream-Pi Action API](https://github.com/stream-pi/actionapi).
## Prerequisites
## Prerequisites
- Java >= 11
- Java >= 11
- Maven >= 3.6.3
- Maven >= 3.6.3
## List of Actions
## List of Actions
- Hotkey
- Hotkey
- Website
- Website
- Twitter
- Twitter
- OBS Actions
- OBS Actions
- Run Command
- Run Command
- Text Block
- Text Block
- Media File
- Media File
- Media Key
- Media Key
- Twitch
## Actions Help Guide
### Twitch Chat Integration
The first step is to acquire an OAuth token from https://twitchapps.com/tmi/, the generated OAuth token should look something like `oauth:xxxxx`.
In the Stream-Pi Server's Plugin page enter your Twitch username, and the generated token then click on `Save Twitch chat credentials` button. You should then be able to use the pre-bundled Twitch chat actions.
### Supported actions
- Send channel message
### Running locally
Copy the `twitch-chat-connect`, `twitch-send-channel-msg`, and `Java-Twirk` jar files from the `PreBuiltPlugins` directory to your Stream-Pi server plugins' directory.
---
## Quick Start
## Quick Start
Build actions by executing `./build.sh` from the command line.
Build actions by executing `./build.sh` from the command line.
To test these actions out in your local environment you'll need to run the [Stream-Pi Server](https://github.com/stream-pi/server) and copy the contents of `PreBuiltPlugins/` to the server's
To test these actions out in your local environment you'll need to run the [Stream-Pi Server](https://github.com/stream-pi/server) and copy the contents of `PreBuiltPlugins/` to the server's
Plugins directory (`data/Plugins` by default), especially if you're writing your own custom action / integration.
Plugins directory (`data/Plugins` by default), especially if you're writing your own custom action / integration.
M build.sh
+24 −35
FOLD=../PreBuiltPlugins
FOLD=../PreBuiltPlugins
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
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
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
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
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
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
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
## OBS Suite
# OBS Suite
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
# Twitch Chat
pushd . || exit
cd twitch/twitch-chat-connect && mvn clean package
mv target/twitch-chat-connect-1.0.0.jar ../$FOLD/twitch-chat-connect.jar
cd ../send-channel-msg && mvn clean package
mv target/twitch-send-channel-msg-1.0.0.jar ../$FOLD/twitch-send-channel-msg.jar
popd || exit
<?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-send-channel-msg</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.sendchannelmsgaction {
requires com.stream_pi.util;
requires com.stream_pi.action_api;
requires com.stream_pi.twitchconnectaction;
requires Java.Twirk;
provides com.stream_pi.action_api.normalaction.NormalAction with sendchannelmsg.SendChannelMessageAction;
}
package sendchannelmsg;
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.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlertType;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
public class SendChannelMessageAction extends NormalAction
{
private static final String TWITCH_CHANNEL_NAME_KEY = "twitch_channel_name";
private static final String TWITCH_CHANNEL_MSG_KEY = "twitch_channel_msg";
private Twirk twirk;
public SendChannelMessageAction()
{
setName("Send Channel Message");
setCategory("Twitch Chat");
setVisibilityInServerSettingsPane(false);
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/stream-pi/essentialactions");
}
@Override
public void initProperties() throws Exception
{
Property channelName = new Property(TWITCH_CHANNEL_NAME_KEY, Type.STRING);
channelName.setDisplayName("Channel Name");
channelName.setDefaultValueStr("channel_name");
channelName.setCanBeBlank(false);
Property channelMessage = new Property(TWITCH_CHANNEL_MSG_KEY, Type.STRING);
channelMessage.setDisplayName("Message");
channelMessage.setDefaultValueStr("channel_msg");
channelMessage.setCanBeBlank(false);
addClientProperties(channelName, channelMessage);
}
@Override
public void initAction() throws Exception
{
}
@Override
public void onActionClicked() throws Exception
{
TwitchChatCredentials.ChatCredentials credentials = TwitchChatCredentials.getCredentials();
if (!isChatCredentialsInitialized(credentials))
{
new StreamPiAlert(
"Twitch Chat plugin configuration uninitialized",
"Please check that the Twitch Chat plugin configuration is correct.",
StreamPiAlertType.ERROR
).show();
return;
}
final String channel = getClientProperties().getSingleProperty(TWITCH_CHANNEL_NAME_KEY).getStringValue();
final String message = getClientProperties().getSingleProperty(TWITCH_CHANNEL_MSG_KEY).getStringValue();
try
{
twirk = new TwirkBuilder(
getClientProperties().getSingleProperty(TWITCH_CHANNEL_NAME_KEY).getStringValue(),
credentials.getNickname(),
credentials.getOauthToken())
.build();
twirk.connect();
twirk.channelMessage(message);
} catch (Exception ex)
{
new StreamPiAlert(
"Failed to send channel message",
String.format("Could not send message '%s' to '%s' channel, please try again.",
channel, message),
StreamPiAlertType.ERROR
).show();
}
}
private boolean isChatCredentialsInitialized(TwitchChatCredentials.ChatCredentials credentials)
{
if (credentials == null)
{
return false;
}
final String twitchNickname = credentials.getNickname();
boolean isNicknameInitialized = twitchNickname != null &&
!twitchNickname.isEmpty() &&
!twitchNickname.equalsIgnoreCase("twitch_nickname");
final String twitchChatOauthToken = credentials.getOauthToken();
boolean isTokenInitialized = twitchChatOauthToken != null &&
!twitchChatOauthToken.isEmpty() &&
!twitchChatOauthToken.equalsIgnoreCase("twitch_oauth_token");
return isNicknameInitialized && isTokenInitialized;
}
@Override
public void onShutDown() throws Exception
{
twirk.close();
}
}
<?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-chat-connect</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>
<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.github.gikkman</groupId>
<artifactId>Java-Twirk</artifactId>
<version>${javaTwirkVersion}</version>
</dependency>
<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>
</dependencies>
</project>
package connect;
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.alert.StreamPiAlert;
import com.stream_pi.util.alert.StreamPiAlertType;
import com.stream_pi.util.exception.MinorException;
import com.stream_pi.util.version.Version;
import connect.chat.TwitchChatCredentials;
import javafx.scene.control.Button;
public class TwitchChatConnectAction extends NormalAction
{
private static final String TWITCH_ACCESS_TOKEN_KEY = "twitch_access_token";
private static final String TWITCH_NICKNAME_KEY = "twitch_nickname";
private final Button saveCredentialsBtn;
public TwitchChatConnectAction()
{
setName("Twitch Chat Plugin");
setCategory("Twitch Chat");
setVisibilityInPluginsPane(false);
setAuthor("j4ckofalltrades");
setVersion(new Version(1, 0, 0));
setHelpLink("https://github.com/Stream-Pi/essentialactions");
saveCredentialsBtn = new Button("Save Twitch chat credentials");
setButtonBar(saveCredentialsBtn);
}
@Override
public void initProperties() throws Exception
{
Property twitchNicknameProp = new Property(TWITCH_NICKNAME_KEY, Type.STRING);
twitchNicknameProp.setDisplayName("Twitch Username");
twitchNicknameProp.setDefaultValueStr("twitch_nickname");
twitchNicknameProp.setCanBeBlank(false);
Property twitchAccessTokenProp = new Property(TWITCH_ACCESS_TOKEN_KEY, Type.STRING);
twitchAccessTokenProp.setDisplayName("Access Token");
twitchAccessTokenProp.setDefaultValueStr("twitch_oauth_token");
twitchAccessTokenProp.setCanBeBlank(false);
addServerProperties(twitchNicknameProp, twitchAccessTokenProp);
}
@Override
public void initAction() throws Exception
{
saveCredentialsBtn.setOnAction(action ->
{
try
{
persistCredentials();
new StreamPiAlert(
"Twitch chat credentials saved",
"Chat credentials been saved, you can now start using Twitch chat integration actions.",
StreamPiAlertType.INFORMATION)
.show();
} catch (Exception e)
{
new StreamPiAlert(
"Failed to save chat credentials",
"An error has occurred while saving chat credentials, please try again.",
StreamPiAlertType.WARNING)
.show();
}
});
persistCredentials();
}
private void persistCredentials() throws MinorException
{
final String token = getServerProperties().getSingleProperty(TWITCH_ACCESS_TOKEN_KEY).getStringValue();
final String nickname = getServerProperties().getSingleProperty(TWITCH_NICKNAME_KEY).getStringValue();
TwitchChatCredentials.setCredentials(
new TwitchChatCredentials.ChatCredentials()
.setOauthToken(token)
.setNickname(nickname));
}
@Override
public void onActionClicked() throws Exception
{
}
@Override
public void onShutDown() throws Exception
{
}
}
package connect.chat;
public final class TwitchChatCredentials
{
private static ChatCredentials credentials;
public static ChatCredentials getCredentials()
{
return credentials;
}
public static void setCredentials(ChatCredentials chatCredentials)
{
credentials = chatCredentials;
}
public static class ChatCredentials
{
String nickname;
String oauthToken;
public String getNickname()
{
return nickname;
}
public ChatCredentials setNickname(String nickname)
{
this.nickname = nickname;
return this;
}
public String getOauthToken()
{
return oauthToken;
}
public ChatCredentials setOauthToken(String oauthToken)
{
this.oauthToken = oauthToken;
return this;
}
}
}
import connect.TwitchChatConnectAction;
module com.stream_pi.twitchconnectaction {
requires com.stream_pi.action_api;
requires com.stream_pi.util;
requires Java.Twirk;
exports connect.chat;
provides com.stream_pi.action_api.normalaction.NormalAction with TwitchChatConnectAction;
}