From eb853be7e8d3616dff536b508aa7d71d3394c55e Mon Sep 17 00:00:00 2001 From: nullnyat Date: Sun, 18 Sep 2022 00:15:51 +0900 Subject: [PATCH] =?UTF-8?q?=E8=89=B2=E3=80=85=E6=B6=88=E3=81=97=E6=B6=88?= =?UTF-8?q?=E3=81=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WorksOnMyMachine.png | Bin 30255 -> 0 bytes ai.png | Bin 204466 -> 0 bytes ai.svg | 14 - src/ai.ts | 489 ----------------------------- src/modules/chart/index.ts | 160 ---------- src/modules/chart/render-chart.ts | 215 ------------- src/modules/dice/index.ts | 40 --- src/modules/emoji/index.ts | 151 --------- src/modules/guessing-game/index.ts | 138 -------- src/modules/kazutori/index.ts | 212 ------------- src/modules/maze/gen-maze.ts | 224 ------------- src/modules/maze/index.ts | 80 ----- src/modules/maze/maze.ts | 1 - src/modules/maze/render-maze.ts | 243 -------------- src/modules/maze/themes.ts | 55 ---- src/modules/poll/index.ts | 146 --------- src/modules/reversi/back.ts | 451 -------------------------- src/modules/reversi/index.ts | 180 ----------- src/modules/welcome/index.ts | 33 -- src/utils/includes.ts | 10 - test/__mocks__/account.ts | 7 - test/__mocks__/misskey.ts | 67 ---- test/__mocks__/ws.ts | 17 - test/__modules__/test.ts | 26 -- test/core.ts | 20 -- test/tsconfig.json | 15 - 26 files changed, 2994 deletions(-) delete mode 100644 WorksOnMyMachine.png delete mode 100644 ai.png delete mode 100644 ai.svg delete mode 100644 src/ai.ts delete mode 100644 src/modules/chart/index.ts delete mode 100644 src/modules/chart/render-chart.ts delete mode 100644 src/modules/dice/index.ts delete mode 100644 src/modules/emoji/index.ts delete mode 100644 src/modules/guessing-game/index.ts delete mode 100644 src/modules/kazutori/index.ts delete mode 100644 src/modules/maze/gen-maze.ts delete mode 100644 src/modules/maze/index.ts delete mode 100644 src/modules/maze/maze.ts delete mode 100644 src/modules/maze/render-maze.ts delete mode 100644 src/modules/maze/themes.ts delete mode 100644 src/modules/poll/index.ts delete mode 100644 src/modules/reversi/back.ts delete mode 100644 src/modules/reversi/index.ts delete mode 100644 src/modules/welcome/index.ts delete mode 100644 src/utils/includes.ts delete mode 100644 test/__mocks__/account.ts delete mode 100644 test/__mocks__/misskey.ts delete mode 100644 test/__mocks__/ws.ts delete mode 100644 test/__modules__/test.ts delete mode 100644 test/core.ts delete mode 100644 test/tsconfig.json diff --git a/WorksOnMyMachine.png b/WorksOnMyMachine.png deleted file mode 100644 index a2b4dd3237fa3d0a65e03401fddf3e183cc3a95a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30255 zcmV(>K-j;DP)3?sj(X@tZRzd2;W(?A)DU%G&!) zzB%Xi&N;Jlb3gMu&pCHeF~*>Aie1_Ki7E?VgM^x8V$5CGq&2k18X7EEx(fW*<`Q~;Mj zwUYn#F^o@Z=u4owk#lw7FewHkzPTTu+fbkGqy<4eWb24%pj`;yO9-l+zPV0-C)0N$ zqGCW|IHtH1<{9>n8|NIe0F;XsZS)47&(}E53;;i<5ZPDoeCIgf7zD6|zBy`b6ay0L z9M_&oZzd#XH6(hd2I%i`UKs<9R#%i)f*?=dG!8hH0N6-RraS1lh@=>h7!Xx2{Ujk- z79o0^1mFriAwYg1Lb{Z`1J(7QgVf2>d4f@-qed`<{tAHgbT;sLBPa$W*0~6(g?`Z0 zC0>ouLtoc=2Bdol&{h(NzRdX+R)FkQ0H1&g()H2eJS~B&uajOuqlReoGkQ(+&l@WS zr236C4ZyJ|uUqIxtJM!YcVh6y7D&e>fbj{*Qlh3)JBWU0-!nMJIRNgXRk=YRzo&y&9`k@y9{>YL0@C{hz-xmF zU9M=)>dlNF(^@#ECPUu0%+6t*olVe=3D2>-0vu<$VtfuNtCc<-5fuXx*B_AXtAO-O zgmjWC-UF}Y@c@7&!RT=@0HaR!@Miy9xPG5aujBX(fM3wP8e_7A>Uuz00`u6Yq=H+G zY7fD&6u|H3J{kdNJ1&Ci2&hA1K=ipM`a_KYM1b6BkiJ`iwvs8k>BkAh=b>6nCjx0v zY7zhwbe4Q|E=EXKxo`Tx0AM}KfYecC=6FBQGBy17+~C0Q==%VCmre&hPv@l;P|2QB ze;uMAE~f9m5h5|hOk_Z|xo`N#=+%6v@A(L0PXO?umgZ9+{deksx1WG{^XC8zLiz^% zb$Y7;B9KXU+4QKA%a~u(m{v&(Vf!?Yn~S1+ zm>o9(W*AOGbSJOZa0D>U1F+VmXB#;7^7vuJ_r6+Pdm;TSf%y@A{CLtUq{$16x_y2z z-SILA>3Vu|FnY|@=uyGaeKnBkM_FZOh10Y0Q6zOVROq2!DuE->1?jsD$bCS^Lc*zI zhCZ`KFwUT#1n?WJU68{OqKOZPO5BRlHbSzFo)V=%m&`z!n{pPUZzYiIMM&+z+GCN9 zsbnwBbm!Vq;5fHUt$^y|DJiWb+Jlf!hxC8ZM#GZvnSn@Y7NM9${}RBaz-x~%K$4i) z%2oJG*U+CLB;N#ZZ}_(vZddywaMEvBgA%3sA^j_1c7F#LdKo3k&2g!f!I(<*+2voe zd!4327Mg5r<8!l%?^XCGLUQ{rR|1kOJC_g;Q!Roj7}MReV4O@djEMwDT!ZLM?qh7d zO@9?MLD{EI-r@zVKaPR)twME;vL^W{u>TKG3E{cjran<*_C5^kd)(CtgNUSq&l0c) zQBsVzpO5PDVP0R!<{+F3t`0fiz?kHgt*@a|sII?q+{s5m4U+tyi5|%wAT`w%vt`nd zyXhMU#=Wk{4%Ht6HLxa-u8)He#TDJR9=@|rUE1Xhp({KxbRrHPJBZF65Dn9UMz>LHx) TfJ8@egYD1`n7xkxLoXtv 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 QT}awZ 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 z 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� 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
    +Ak+ zI=_c2bSG3K)rS~Yx0-WKVrEQ=o=eVL>&TC$Jpp5g!yuQ5y*Rhbl118s2Rl%#4o*K) z)*pnp4zp@gG2gX`PDbRYUL;t9=pswq2L-n{hV?}#UkDI+z)4SOi`e!SJIDzc{0XS` z*vpqc-#1q>N(Nk5k~K0+dckM^O51q~voUW)VS=EjaS-lCb{gHH2-mM$O%q9=M}%uwxU*_qC3CM5Qqd;|xqr z>vK@PV|Do`9bN1GRWouj%vd^!du#W@jqKASXV5E*lu?~WAR_>$+ljzVwRp#e6$pV( zJF6L~RRW|mUPdM?Ov*qj!jYY1;L-lR_#<+1(JuYX&COHiEt)|hfQL@6#y%WksxP1g zyvB=|T<&;Y4BU4BLL(4E3$X4E`bpRJ`!7S$fJRSV2u<)F{njA^NYoiC{Y<5y~nw?S<^ zHY5rp*)+z{=(79+KJ7pwth@lV5kv5Hxo$yUgIx7trtIOvoiID6IH=n9tRj_YxEpcA z;5GOtKt1LSok0WLYHX@>8l)G?6~?=vUc~Q`OF6%mn_*Vqst#j>Z4C3_p`<;x7- zWq=lqHIVQeLq5_;k)_;lT3NCH;#(d=x_pLcZDd?#vtjCc&85E#Nf>~s*FnU<;)Iz& zF$M*XIl-1YiLzKgw$m66dhX){7E19_`~!wH@q*?;k{6K?@g^F{b)Vn$<;$0Ccb`2I z{O^(9#P=e^l$1=}#Qd8zjO&myp>PXl4O#Fs=cLHG8e%Wr_}W_UeU#c?btk4%jmfus ztA+1G{yxNZ3Ioz5d2LD?JjHacLk??88wM>GIT{(%@5v1sGE)#rDA;Li!RiRM1#F%_)V4kgIe6e8DR}RJcV7bQE~pkHGr~G}$G+Rpnhm z5i0Y$5R9yY%N4FrKi5RM6b~P@(SFmwed~QhX+1&n4e?%}GCe zPC5vnQib}8K;xUdCet$VAz`*gS$g-dXvj`*@?Nzg=dg+pL`|?1_{#S&@^W?Rz{)^H zyQHs`ulI=d#EFuYNo$VFNQ?C-Wj*`VhqfP9qr&>6zh8om>1p~GF2vUK_K;(8Cmcbe zctLvtM5q9=Y74?m!3&aZmJ4jEaUxD;WZn7{AHJAGRP|fRuNsF1gNqDHDXXzIC$F4? zOcKI{kjn9O2wK4;`sO3rRW`&lv+%7haMnEtBhZfEHaag4`h|1J)C>y>wLIW0@ZV`a zVSD@bK02NPyF~Np&F5C{kB4kBBMfif0}&NQst7rQ-h3_zbhuP+i35Y`N6WyKk;-`j z7YE02nCz%1JG2Kc(zoGyh+N*#;ua~WpS}Z;)O9NHXL%1uXy9KEoAq0CT5g~z&aI7B zW>U(5VXSBI0Af(E5aN)+pL5S``s(^N)h{yUWp8U17q)<8>0vBkCmV{;U#{pqV&FA8 z{}c{tak0cvl4Kl)5V1bTviOfb7*D+?FP4^+?4(25@ej)*>6rRZy!)BJ;QM66+_>=! z(Fkx*PJE*GVNH6%HNs&f zfVeBMKRjHW>@HFu5Ga9_WSW3-77TwIZb2nc^d7| zZ$CsZEDCk#{TD`bu1;K+VL~Q!?bAOV*W^|v_+B9KOvNK;mWLR5i0FB|LG!zu-fe!c z+QgN9T})PR_4V=j{Ek>_p)9XQhFq3kME7x}d7)i6fab1morAORbABK6;o3jtHdXp+ zq{-9NXt1Td>ked$@%wYsFd4e-hkiRW+`oTJ^II;c-E4xlVQ`FE?2f}OR+c^I(+&tF zxwx@ryK-n^#WM1L4XO1T6f^*RhT|Gs%zhe}wEv3gE3;r%z>6l0o#F5mn5k~l7%42M z6x-?lcG5)tT_#P%i>QBES^t1T9*|JOlrv{_?%YwVwuUnOI2hjPA^3!-1Rp(>Wfm9( zNh_Fi008{y9eL*GEBcXyGMRZN*@4R4Affq6SW*>*;?vYUcjhu0c}|*Htz&s*Nd(?@ zex_!&U2SrjdJ@dD&+lR$5@ne)<>-$4BZ7otkE-+i-^;92fpYFaToykcJb^ZN&lBIjIwn4(U%xM89%7^#>FV-7}t{9l>8+ z>AL#pfcRLz)6wxIzb`DHj4L<)Mpj+K#@l z|HKcwxH|G)z9j#R#sA#DPxmN6*P4!1W+Gqx1OlkwBAQYvO0ba~aSJ2)VmxVbnpn`> z8k`EgD#wTYoa}02S*w34z`F<03(+E;^)dojBt42DiBqXmgy!^Zk-lXwmPf%*hywIT-9Ki;R01>{!bd7NhN&xVW zm4{m9LnmIVJuN3Y^?z9>DJf~}Yf4IrRKU;LEg|QU*ZXlmBZ9h7!GZM*n!Y}|J0^$A` z@0{M$-i08@w!4WZ?5Tu5w^!>!yi~gO01QurpQu#|k3G$oF^Ak7Jlz0Dr0ra&~t0g~}z!gzK`ys@foNMHPZZpT;_h?Oo)T*DaS5CVM zWw;S6)?ul>GTE7z9ucybjG{Za&*qfZ{G#qn9jgy=SrF2{f6_#(koLmBuw#GubJCTS zin&u?E0BZ8*Pz*IKgm#yU3Z`{@@m-o{EH-^7S3yAx-CFYi(n#AN-K`G{A%7Y3@IzP znATr&rXbGtab0~F7t;0{izlT)oHKfQuc)YKv12eOMwmGPSCQ21I;2n`K8So=l^jM> zz-~C%;1r@xti_KiO!t>Bd@cV8wU@{7(E?4i#@_IdS2Pfni#^Q$!B|sd3;05W^{pxo zA%`VQGCv~y;#zdeuBG_+rZ<(md(}r}ZK|lu;Wy6^9#vbbHc(^N8@T8#xdS%=T;n}y z@JAfYvG5r-aJc(!83<`M?jm!QMIkaRQIjbuG)-(O-$o~M!I8h z06ARiLJY%z6rf4YF}xLC*W&gIh>vm2UAuReXV27JInW5St$T^O*igK& zj$;^|oQ1Fp`n{=AV0tp2|0&tBm$!$@b|7Wa`KedlKa`V|-G+kAsQt3PORt7oK(VII z0Oo2n30jNOL?^bAd>!%~|5?~u*A?y!?|JXIBUPY5A`BC~dPhLuso%uRdGo^wgLiZ# zsIeBY1SE2DQ@n)chNegXKOMfui?|!8xo*UkO&iXUrA+yy_9w2kwvbn%(e$1wKxNQF zOSiX(6a_55ncIou(KXmhA*7%7qz%xOI|nE5VwG7Na&jShfE3gXR(p!<2aQW>GBO_A zIE2Ed&WeX&MuAU^hGOeGi33dmiT%yC>jkgPJKowt-2$+ozLt%Ng+IeU$JqG5e-C=0 zrits|K|QN#RrOv+j_rz6bI`0Vwy$#{zQ*EEyyIu#^L_ecsgEJPjWT{eg=` zpO$gpEZ_i}lRrNFBcZKfoN!_YNJ2@HksEqzF=$b8pz6*->O@dD{b|ndgN!qm;ZTv( zBSSTB8ow>7I&p)-UExxto$pd*ndV~t7;};H0c%o0BDBt_`YbbS-#)ftu~|?nQ35K3 z`@{PfsLb~dH})W=oO+ZyKo3Ob8qHwholr+y!Zmh%>FC&bcX-&gU;6iPIV>R~6Ty#T zU|?u9ab1#t`vDI9@hdFK1P;VE*fqS)SV3Bg_+9Vpu8m(Xwt4y6fEqOHIVl=kyzD{& z^^mJcMF0Nn2%E&#IiYFH0b;Jv0HV@;v|MlZ?%k;C*4F>@?fk7sh*k^E1T4eVxVAd+ zNiC|AXGI+#czrL@p661fVSc$o>GA-kk0<;8>blZ+sN3#8mS~a4Qkc1o$d*XL%#bXV zCCeR#lBGh{Xc#+D$yO$jY=e@eW-ND4WQ`QY5|t$?Ni+7cW)Jh6;eKBHU;JO-jrm-k z`CZrVT<3h3a~>Rf0M48PirGN2SF4Lhh^SmK;K1r>kPdA!b71(u&s91Ho+c%7xf7)8> zlc=GfKANvTBf#NktK)DErdFA^1}d+H$CdK-8l=m`l=yiQ`(k%l8X@{Fs-WD&CpIf| z&M-JuR7{Ley%pW0U`|Vxar?!4#^~tDfd1D2K05j6;2X|@q6awmo0zL*k$hLLUR_14 zXN4hLrx7=_KZLKI0f6fZVW$E91|$ey2owdj44s1`YV7iWe^R~ueS-F=5sGwUXUSSgsMOr!>_Aw z_%K_Q|p)=Rm5R-u=%iLfangiw+C5xWixsz(7Oe6q1DmU@JXR$ zRzVFg0*6Z-{U@RDBJJ!+WR@+yJ;5JY**P0)6eeHBAU11|!Z!?k!fIZm$;b6F|ptLzQ-&8%7S6s{3tfIbN zXPnBc1SdhB18scbDY#v@L!`S1n#6AvNV+UlY}!*Q(l`^Be0?!7F)?IC*6K!u~aJ2DlM1#Yfn+m#D)KfQn%Xuf-H zbz-{i{zFk^`ZacJDRJ%e5`?yB9kP{H!!tH&QCBgDo;IwX3%Hw?2q8 z`S|!a*-!o)B;zl$;>fEar$-(~QMANcMk4g)p7=AH)zDOb<^23=yra@9?w)}GMR2vf zZtXV~Z3e7Q7DsaChr-xN6d|vKN@>G?8_TMwM+3>Thn2mVe#4LmTUeU{F0t#~JL9IS zGmJ;eVnOi_d_YZZwrhNvTp_^a;B%}@>j<>S3s|{WGE1XM; zL>`^`Dwjb`^hNHQk?7#tRHl3~?7+*hNH0k@MDsH-naFo!tN`LuvE7}Jt%!02=CI#( z$(i%6Yn4LTG-e{IGvJ~GxlO#}J&XwyKXRo_L6r7>1%fA;K+_h9vi z^K=vHCHWcx)osE>kgBBQ`+!>f={^t$d_nsDq)1C!H%?=w2A?z5mQExd@|_<$y9v2O zb8eoZED&G7DETyN?>#e|J~+_^0K`rsH>zeoU7BdZ#w2BBneJJDLGqzoJ9q6WD=kG_ ztjfC$6xt1lSpMhW5)aK_cpc1RcxEtS!BLANRmOBRX=#?{zHmDTRO~0KP}9xJAZmPh zmO&Kob{(wXyS|>>K3(d=j-B)aCB%GyX+9(HWQ?SPy1l7rt3kjn38$s0Z}S%6i=SPV zdH8g#ifs**np^5N&Lf-8dI4yRbStJ9)swo8*p4rAj!-N?XfhHnFpGHsCEi}~y_+w5 zP!1ywo|E)%cWaf5VAtW?zpBy=95gCFYdnkTI-v_M#`s3>H{%8^4@BT-X21*^IBBa|kMgtw>25=h#5X8$2QmoUw_X36D* ztqtsAd7sg8a)u*47uI*mSnX!L7FV7A3F!oJ(By`UwR&*`Mm%(eO$%YEtgJkrZoBe_ zy0cOq3#u3$a+6OMcfMXwF(q5cTD5qra1797B2v9;Bw_DI<0%TBI{Sba8i!YGu&xe8_+!($hslbvMuA$T%p;I1m;V7HQVu zE8=2nu0I4h0*-+x{Aiy_T8ytp1sCLr6dfCN#ZzQy-R9?xG+BBL&~t%Hm2*o=E^Xr{ zf~+O14_f13OXCAlsS}drG;D(8H0I$cGQef>9v&WuWf*iyy0@j7Fc1+F`#sNeEn%>r zpCai=zsnjO5mg6F?+6lb6T{U^KUIF+te_DQfA@Od_dkk8DUTjS*r&DM>H4e<6#`!N z?vRrh(w7h5eQ}mhC#OK(56{ql4^);Sz4Xo<3Qo|G{J-1;-<>tr=XkHBCisc|6%uh* zFR80Uv4}9_f|)66x{o$>kyMYnb&3&}_)hlf@eSn+Y7XdkZIhAof3$56e?9gedx?ZD zH7u))b(Eve2;$HB277raYHi`*l6X72-3T!M9xd4bYL}7#wu*#~)8HxeT71S&|4=La zigKU>pmLHu(zyy6eESXkI+sAJazDZmRHf4N~2QwpX0{mvImkp1^=ud_5GN-ID7p zjzyC-eTw%5{A!@)Szg}lB+BNhTz9yJvSBkICN3o9`-rrHBl`H^q${+uahTG2<$|Y1 z&s9wwu^=Fh1krw{wbbeLMGtq2&a!M{Tc`MRHrf?WRRcE4pYuGh`eXf zQmJ>qf(9Lw`X@&1`MkZo$^WL4=Xy&V_HE}(OG|^tx}o9r%n5~Ur`zH|4>g@i=890D zKkX9*-g;t8CQpAE3|A3LnbyBY+Bpy}G}Kk$<0UW8*0_9}h2YE1Z-Innvm7rmEwfsmC-(Mlq84 z$jYhk_+e=MvX19|t>>|QebPJpNy=DB^i)bZ3B*uTnp=h=792Y+;(O)jvO|=rjz(up^+r9 zIRH>Wy51IzDgEOBW_1ObBGt&Q_miyYLK(%zv$L~^i{2V~V5uBz!}kcap-pc=8L7`< zhSqCE4G|c! z76Vh|VPoTBBbx^_;JsMw`FfMSUmv#L4HJe{R8&Icx6aZb2?-qs2ZxOwhwvXm6nW@L zGwu$ikfaYN*iWZ83UI8QT(rv#Zj=Y)bE(1mt-y?o;2WGaYgLki+E^Gb*N*R@f=XQM zyEf3YLn!!P@b5F1B$v!F7z|8~U`TF(Jm;WA#Q}t%pkOmIx|SE58Q{wCkOb3gQN8k{ z$AMcINKYWwgQW@|Wk>n@Hq~M%oIWtcaKZNkTy}s#0=4*n)cf=yH8GXs?2BjcH{TBc zRd_-C{7Z0qX6_!kl8s#Dcs*UmB$;g`N|w8Md3WB{&3eI1$v&^oyDjsjO()z%)iPg5 za8c^)U}et+RZK&OT;%JbHp)a`<7yas9^;*Ph<^fSFL$1U>_~_w4SbG66!)lB`~puV zXgka{#iM)$)L0%Oq2%q0_gcFU&>!(Ht-YH#$Som$etvQB_rJwm(b1^!zfGz#TC_(` zekDZdlhuHaBo{tToE83{W1BM4d8Fk*A#K>NkPT~hrQ4uC-*pFWfC)N#HX)l z-SZ}eIw8WeP43^%4F~!lh_CeWxkmsji{Bt_<`T0xsGk|>=}|j}N-dw~G0In^_Yi_} zW8QkuU~G~qH{rTWWME+6U~FCvH09<%fM;D=y~-KN$(l-v`Gze%BM$skfRn5l)5^J> z?ogcgqrt^zC17epdG*RpYHyMKE75H3&80qf_Vk4PEGm!MF$9k40X3f&0Xg8i6jDAK z^R^v7D`Dy=a=hICS05V!FpGweIhk>9YYMv~1 z*JQ^Y1pzBd|5Mrnsu0>M-j0qApmvruxAK-xoq1>0*VY0zIMfrmY)q;yG{^5yLXA#t z(5@n6b&zhipc_L=d;7Ksm+Ua%=`#5*wP6|;A{OhIM!uV0@DhK)4Wb-$#8E}<@oz(S zq^guQ5ESGn;FPdYx7YXjK4>3VSg4>t*__5FS^{Enj)>3$ri;y?paC6!R#gJPPBtmF8drSeJ57#3V=o^n4>)YE@RJ0!er znSN*a$kw)5`T3P;qX(JZ%e6x?UupUCe*`|Ri{BK!>2I+te)oj-%fC5w z3fXtwyqz3BsKh5&fBM>aI{`(^x~R-`JMwM&ps+SKb*DKQ{+e@$FBxZFw8? zzEa-}{jr16Eq1cT3sq7}FZw{GkCijALi$$$Abn=ud#$PD(J_Rlr)L5^&^ZX`Wq%@( z6EPn77}JqV9w}_i$H*1auf3oYm?;eP^cbv@1HP?P-Synq>*I8DnupPY|j%2R#(krxE@Co$KLF<0s@UUPDaB(dql>G6e`N$nLuB7ZF}wmn(g z_R#P^_N?$h*9E5VK-`8p!T%X%bsLRBw`@a@?%m_&;&RvlsZ}=v z<4^7bJ%I!*3*VAW#-|DCzdU5BwgXEVEp4B{<(G4^R#|UcTU%RP^pDmx6=*rKSKWYl zx`Q!R(fQ%8obC_{@~@CM$J+I2(OD1GV2p;w6Do6!5FFgPzq+P|GvYL=eBWsanJ=fT zoW)S1`+T(Isq&9(C;Aqgr!XUjNHLc0*2?eXH1DsjsCeYKwMQ??%gZY&`erBTDh&<^ zIbX&Cm%eK+P-gi`2+5BzX2Okx%0Y~ui|w^Fn-4-RetyYXm&J`uOiawoJe20nhX9aG zjr(~%xd=r&PBqH-k9-n6P=4saor!I1+Plh(tWh+z#W_rE-r~+f&Ba!vr<@$>Gt|1W|+u+F9*e(w9D~gGB46gJ@&6f@pmqw<4pNN*-chO)hDy`P z4qvRA<%R?G@K%jM#%bc{xSX%45;|+NwQU!@A4sXptym!th=asa=ZH?1h|V}iA7}W3 zIC?}GbNC4M@DYrqvKsEl5!|t3hv4^-Ba*kh#sAL-u6jGUT?zXCKVaV1`vg89##+I` u`wB7Ol8-Y&&)L&A$QNxv^mB6aMq7G&d)62HfKjdpgyAXElf}9hZ~hk*ijau_ diff --git a/ai.svg b/ai.svg deleted file mode 100644 index bbf6cbc..0000000 --- a/ai.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/src/ai.ts b/src/ai.ts deleted file mode 100644 index 7d693d4..0000000 --- a/src/ai.ts +++ /dev/null @@ -1,489 +0,0 @@ -// AI CORE - -import * as fs from 'fs'; -import autobind from 'autobind-decorator'; -import * as loki from 'lokijs'; -import * as request from 'request-promise-native'; -import * as chalk from 'chalk'; -import { v4 as uuid } from 'uuid'; -const delay = require('timeout-as-promise'); - -import config from '@/config'; -import Module from '@/module'; -import Message from '@/message'; -import Friend, { FriendDoc } from '@/friend'; -import { User } from '@/misskey/user'; -import Stream from '@/stream'; -import log from '@/utils/log'; -const pkg = require('../package.json'); - -type MentionHook = (msg: Message) => Promise; -type ContextHook = (key: any, msg: Message, data?: any) => Promise; -type TimeoutCallback = (data?: any) => void; - -export type HandlerResult = { - reaction?: string | null; - immediate?: boolean; -}; - -export type InstallerResult = { - mentionHook?: MentionHook; - contextHook?: ContextHook; - timeoutCallback?: TimeoutCallback; -}; - -export type Meta = { - lastWakingAt: number; -}; - -/** - * ่— - */ -export default class ่— { - public readonly version = pkg._v; - public account: User; - public connection: Stream; - public modules: Module[] = []; - private mentionHooks: MentionHook[] = []; - private contextHooks: { [moduleName: string]: ContextHook } = {}; - private timeoutCallbacks: { [moduleName: string]: TimeoutCallback } = {}; - public db: loki; - public lastSleepedAt: number; - - private meta: loki.Collection; - - private contexts: loki.Collection<{ - isDm: boolean; - noteId?: string; - userId?: string; - module: string; - key: string | null; - data?: any; - }>; - - private timers: loki.Collection<{ - id: string; - module: string; - insertedAt: number; - delay: number; - data?: any; - }>; - - public friends: loki.Collection; - public moduleData: loki.Collection; - - /** - * ่—ใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใ‚’็”Ÿๆˆใ—ใพใ™ - * @param account ่—ใจใ—ใฆไฝฟใ†ใ‚ขใ‚ซใ‚ฆใƒณใƒˆ - * @param modules ใƒขใ‚ธใƒฅใƒผใƒซใ€‚ๅ…ˆ้ ญใฎใƒขใ‚ธใƒฅใƒผใƒซใปใฉ้ซ˜ๅ„ชๅ…ˆๅบฆ - */ - constructor(account: User, modules: Module[]) { - this.account = account; - this.modules = modules; - - let memoryDir = '.'; - if (config.memoryDir) { - memoryDir = config.memoryDir; - } - const file = process.env.NODE_ENV === 'test' ? `${memoryDir}/test.memory.json` : `${memoryDir}/memory.json`; - - this.log(`Lodaing the memory from ${file}...`); - - this.db = new loki(file, { - autoload: true, - autosave: true, - autosaveInterval: 1000, - autoloadCallback: err => { - if (err) { - this.log(chalk.red(`Failed to load the memory: ${err}`)); - } else { - this.log(chalk.green('The memory loaded successfully')); - this.run(); - } - } - }); - } - - @autobind - public log(msg: string) { - log(chalk`[{magenta AiOS}]: ${msg}`); - } - - @autobind - private run() { - //#region Init DB - this.meta = this.getCollection('meta', {}); - - this.contexts = this.getCollection('contexts', { - indices: ['key'] - }); - - this.timers = this.getCollection('timers', { - indices: ['module'] - }); - - this.friends = this.getCollection('friends', { - indices: ['userId'] - }); - - this.moduleData = this.getCollection('moduleData', { - indices: ['module'] - }); - //#endregion - - const meta = this.getMeta(); - this.lastSleepedAt = meta.lastWakingAt; - - // Init stream - this.connection = new Stream(); - - //#region Main stream - const mainStream = this.connection.useSharedConnection('main'); - - // ใƒกใƒณใ‚ทใƒงใƒณใ•ใ‚ŒใŸใจใ - mainStream.on('mention', async data => { - if (data.userId == this.account.id) return; // ่‡ชๅˆ†ใฏๅผพใ - if (data.text && data.text.startsWith('@' + this.account.username)) { - // Misskeyใฎใƒใ‚ฐใงๆŠ•็จฟใŒ้žๅ…ฌ้–‹ๆ‰ฑใ„ใซใชใ‚‹ - if (data.text == null) data = await this.api('notes/show', { noteId: data.id }); - this.onReceiveMessage(new Message(this, data, false)); - } - }); - - // ่ฟ”ไฟกใ•ใ‚ŒใŸใจใ - mainStream.on('reply', async data => { - if (data.userId == this.account.id) return; // ่‡ชๅˆ†ใฏๅผพใ - if (data.text && data.text.startsWith('@' + this.account.username)) return; - // Misskeyใฎใƒใ‚ฐใงๆŠ•็จฟใŒ้žๅ…ฌ้–‹ๆ‰ฑใ„ใซใชใ‚‹ - if (data.text == null) data = await this.api('notes/show', { noteId: data.id }); - this.onReceiveMessage(new Message(this, data, false)); - }); - - // Renoteใ•ใ‚ŒใŸใจใ - mainStream.on('renote', async data => { - if (data.userId == this.account.id) return; // ่‡ชๅˆ†ใฏๅผพใ - if (data.text == null && (data.files || []).length == 0) return; - - // ใƒชใ‚ขใ‚ฏใ‚ทใƒงใƒณใ™ใ‚‹ - this.api('notes/reactions/create', { - noteId: data.id, - reaction: 'love' - }); - }); - - // ใƒกใƒƒใ‚ปใƒผใ‚ธ - mainStream.on('messagingMessage', data => { - if (data.userId == this.account.id) return; // ่‡ชๅˆ†ใฏๅผพใ - this.onReceiveMessage(new Message(this, data, true)); - }); - - // ้€š็Ÿฅ - mainStream.on('notification', data => { - this.onNotification(data); - }); - //#endregion - - // Install modules - this.modules.forEach(m => { - this.log(`Installing ${chalk.cyan.italic(m.name)}\tmodule...`); - m.init(this); - const res = m.install(); - if (res != null) { - if (res.mentionHook) this.mentionHooks.push(res.mentionHook); - if (res.contextHook) this.contextHooks[m.name] = res.contextHook; - if (res.timeoutCallback) this.timeoutCallbacks[m.name] = res.timeoutCallback; - } - }); - - // ใ‚ฟใ‚คใƒžใƒผ็›ฃ่ฆ– - this.crawleTimer(); - setInterval(this.crawleTimer, 1000); - - setInterval(this.logWaking, 10000); - - this.log(chalk.green.bold('Ai am now running!')); - } - - /** - * ใƒฆใƒผใ‚ถใƒผใ‹ใ‚‰่ฉฑใ—ใ‹ใ‘ใ‚‰ใ‚ŒใŸใจใ - * (ใƒกใƒณใ‚ทใƒงใƒณใ€ใƒชใƒ—ใƒฉใ‚คใ€ใƒˆใƒผใ‚ฏใฎใƒกใƒƒใ‚ปใƒผใ‚ธ) - */ - @autobind - private async onReceiveMessage(msg: Message): Promise { - this.log(chalk.gray(`<<< An message received: ${chalk.underline(msg.id)}`)); - - // Ignore message if the user is a bot - // To avoid infinity reply loop. - if (msg.user.isBot) { - return; - } - - const isNoContext = !msg.isDm && msg.replyId == null; - - // Look up the context - const context = isNoContext ? null : this.contexts.findOne(msg.isDm ? { - isDm: true, - userId: msg.userId - } : { - isDm: false, - noteId: msg.replyId - }); - - let reaction: string | null = 'love'; - let immediate: boolean = false; - - //#region - const invokeMentionHooks = async () => { - let res: boolean | HandlerResult | null = null; - - for (const handler of this.mentionHooks) { - res = await handler(msg); - if (res === true || typeof res === 'object') break; - } - - if (res != null && typeof res === 'object') { - if (res.reaction != null) reaction = res.reaction; - if (res.immediate != null) immediate = res.immediate; - } - }; - - // ใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใŒใ‚ใ‚Œใฐใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใƒ•ใƒƒใ‚ฏๅ‘ผใณๅ‡บใ— - // ใชใ‘ใ‚Œใฐใใ‚Œใžใ‚Œใฎใƒขใ‚ธใƒฅใƒผใƒซใซใคใ„ใฆใƒ•ใƒƒใ‚ฏใŒๅผ•ใฃใ‹ใ‹ใ‚‹ใพใงๅ‘ผใณๅ‡บใ— - if (context != null) { - const handler = this.contextHooks[context.module]; - const res = await handler(context.key, msg, context.data); - - if (res != null && typeof res === 'object') { - if (res.reaction != null) reaction = res.reaction; - if (res.immediate != null) immediate = res.immediate; - } - - if (res === false) { - await invokeMentionHooks(); - } - } else { - await invokeMentionHooks(); - } - //#endregion - - if (!immediate) { - await delay(1000); - } - - if (msg.isDm) { - // ๆ—ข่ชญใซใ™ใ‚‹ - this.api('messaging/messages/read', { - messageId: msg.id, - }); - } else { - // ใƒชใ‚ขใ‚ฏใ‚ทใƒงใƒณใ™ใ‚‹ - if (reaction) { - this.api('notes/reactions/create', { - noteId: msg.id, - reaction: reaction - }); - } - } - } - - @autobind - private onNotification(notification: any) { - switch (notification.type) { - // ใƒชใ‚ขใ‚ฏใ‚ทใƒงใƒณใ•ใ‚ŒใŸใ‚‰่ฆชๆ„›ๅบฆใ‚’ๅฐ‘ใ—ไธŠใ’ใ‚‹ - // TODO: ใƒชใ‚ขใ‚ฏใ‚ทใƒงใƒณๅ–ใ‚Šๆถˆใ—ใ‚’ใ‚ˆใ—ใชใซใƒใƒณใƒ‰ใƒชใƒณใ‚ฐใ™ใ‚‹ - case 'reaction': { - const friend = new Friend(this, { user: notification.user }); - friend.incLove(0.1); - break; - } - - default: - break; - } - } - - @autobind - private crawleTimer() { - const timers = this.timers.find(); - for (const timer of timers) { - // ใ‚ฟใ‚คใƒžใƒผใŒๆ™‚้–“ๅˆ‡ใ‚Œใ‹ใฉใ†ใ‹ - if (Date.now() - (timer.insertedAt + timer.delay) >= 0) { - this.log(`Timer expired: ${timer.module} ${timer.id}`); - this.timers.remove(timer); - this.timeoutCallbacks[timer.module](timer.data); - } - } - } - - @autobind - private logWaking() { - this.setMeta({ - lastWakingAt: Date.now(), - }); - } - - /** - * ใƒ‡ใƒผใ‚ฟใƒ™ใƒผใ‚นใฎใ‚ณใƒฌใ‚ฏใ‚ทใƒงใƒณใ‚’ๅ–ๅพ—ใ—ใพใ™ - */ - @autobind - public getCollection(name: string, opts?: any): loki.Collection { - let collection: loki.Collection; - - collection = this.db.getCollection(name); - - if (collection == null) { - collection = this.db.addCollection(name, opts); - } - - return collection; - } - - @autobind - public lookupFriend(userId: User['id']): Friend | null { - const doc = this.friends.findOne({ - userId: userId - }); - - if (doc == null) return null; - - const friend = new Friend(this, { doc: doc }); - - return friend; - } - - /** - * ใƒ•ใ‚กใ‚คใƒซใ‚’ใƒ‰ใƒฉใ‚คใƒ–ใซใ‚ขใƒƒใƒ—ใƒญใƒผใƒ‰ใ—ใพใ™ - */ - @autobind - public async upload(file: Buffer | fs.ReadStream, meta: any) { - const res = await request.post({ - url: `${config.apiUrl}/drive/files/create`, - formData: { - i: config.i, - file: { - value: file, - options: meta - } - }, - json: true - }); - return res; - } - - /** - * ๆŠ•็จฟใ—ใพใ™ - */ - @autobind - public async post(param: any) { - const res = await this.api('notes/create', param); - return res.createdNote; - } - - /** - * ๆŒ‡ๅฎšใƒฆใƒผใ‚ถใƒผใซใƒˆใƒผใ‚ฏใƒกใƒƒใ‚ปใƒผใ‚ธใ‚’้€ไฟกใ—ใพใ™ - */ - @autobind - public sendMessage(userId: any, param: any) { - return this.api('messaging/messages/create', Object.assign({ - userId: userId, - }, param)); - } - - /** - * APIใ‚’ๅ‘ผใณๅ‡บใ—ใพใ™ - */ - @autobind - public api(endpoint: string, param?: any) { - return request.post(`${config.apiUrl}/${endpoint}`, { - json: Object.assign({ - i: config.i - }, param) - }); - }; - - /** - * ใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใ‚’็”Ÿๆˆใ—ใ€ใƒฆใƒผใ‚ถใƒผใ‹ใ‚‰ใฎ่ฟ”ไฟกใ‚’ๅพ…ใกๅ—ใ‘ใพใ™ - * @param module ๅพ…ใกๅ—ใ‘ใ‚‹ใƒขใ‚ธใƒฅใƒผใƒซๅ - * @param key ใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใ‚’่ญ˜ๅˆฅใ™ใ‚‹ใŸใ‚ใฎใ‚ญใƒผ - * @param isDm ใƒˆใƒผใ‚ฏใƒกใƒƒใ‚ปใƒผใ‚ธไธŠใฎใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใ‹ใฉใ†ใ‹ - * @param id ใƒˆใƒผใ‚ฏใƒกใƒƒใ‚ปใƒผใ‚ธไธŠใฎใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใชใ‚‰ใฐใƒˆใƒผใ‚ฏ็›ธๆ‰‹ใฎIDใ€ใใ†ใงใชใ„ใชใ‚‰ๅพ…ใกๅ—ใ‘ใ‚‹ๆŠ•็จฟใฎID - * @param data ใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใซไฟๅญ˜ใ™ใ‚‹ใ‚ชใƒ—ใ‚ทใƒงใƒณใฎใƒ‡ใƒผใ‚ฟ - */ - @autobind - public subscribeReply(module: Module, key: string | null, isDm: boolean, id: string, data?: any) { - this.contexts.insertOne(isDm ? { - isDm: true, - userId: id, - module: module.name, - key: key, - data: data - } : { - isDm: false, - noteId: id, - module: module.name, - key: key, - data: data - }); - } - - /** - * ่ฟ”ไฟกใฎๅพ…ใกๅ—ใ‘ใ‚’่งฃ้™คใ—ใพใ™ - * @param module ่งฃ้™คใ™ใ‚‹ใƒขใ‚ธใƒฅใƒผใƒซๅ - * @param key ใ‚ณใƒณใƒ†ใ‚ญใ‚นใƒˆใ‚’่ญ˜ๅˆฅใ™ใ‚‹ใŸใ‚ใฎใ‚ญใƒผ - */ - @autobind - public unsubscribeReply(module: Module, key: string | null) { - this.contexts.findAndRemove({ - key: key, - module: module.name - }); - } - - /** - * ๆŒ‡ๅฎšใ—ใŸใƒŸใƒช็ง’็ตŒ้ŽๅพŒใซใ€ใใฎใƒขใ‚ธใƒฅใƒผใƒซใฎใ‚ฟใ‚คใƒ ใ‚ขใ‚ฆใƒˆใ‚ณใƒผใƒซใƒใƒƒใ‚ฏใ‚’ๅ‘ผใณๅ‡บใ—ใพใ™ใ€‚ - * ใ“ใฎใ‚ฟใ‚คใƒžใƒผใฏ่จ˜ๆ†ถใซๆฐธ็ถšๅŒ–ใ•ใ‚Œใ‚‹ใฎใงใ€้€”ไธญใงใƒ—ใƒญใ‚ปใ‚นใ‚’ๅ†่ตทๅ‹•ใ—ใฆใ‚‚ๆœ‰ๅŠนใงใ™ใ€‚ - * @param module ใƒขใ‚ธใƒฅใƒผใƒซๅ - * @param delay ใƒŸใƒช็ง’ - * @param data ใ‚ชใƒ—ใ‚ทใƒงใƒณใฎใƒ‡ใƒผใ‚ฟ - */ - @autobind - public setTimeoutWithPersistence(module: Module, delay: number, data?: any) { - const id = uuid(); - this.timers.insertOne({ - id: id, - module: module.name, - insertedAt: Date.now(), - delay: delay, - data: data - }); - - this.log(`Timer persisted: ${module.name} ${id} ${delay}ms`); - } - - @autobind - public getMeta() { - const rec = this.meta.findOne(); - - if (rec) { - return rec; - } else { - const initial: Meta = { - lastWakingAt: Date.now(), - }; - - this.meta.insertOne(initial); - return initial; - } - } - - @autobind - public setMeta(meta: Partial) { - const rec = this.getMeta(); - - for (const [k, v] of Object.entries(meta)) { - rec[k] = v; - } - - this.meta.update(rec); - } -} diff --git a/src/modules/chart/index.ts b/src/modules/chart/index.ts deleted file mode 100644 index ead3721..0000000 --- a/src/modules/chart/index.ts +++ /dev/null @@ -1,160 +0,0 @@ -import autobind from 'autobind-decorator'; -import Module from '@/module'; -import serifs from '@/serifs'; -import Message from '@/message'; -import { renderChart } from './render-chart'; -import { items } from '@/vocabulary'; -import config from '@/config'; - -export default class extends Module { - public readonly name = 'chart'; - - @autobind - public install() { - if (config.chartEnabled === false) return {}; - - this.post(); - setInterval(this.post, 1000 * 60 * 3); - - return { - mentionHook: this.mentionHook - }; - } - - @autobind - private async post() { - const now = new Date(); - if (now.getHours() !== 23) return; - const date = `${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`; - const data = this.getData(); - if (data.lastPosted == date) return; - data.lastPosted = date; - this.setData(data); - - this.log('Time to chart'); - const file = await this.genChart('notes'); - - this.log('Posting...'); - this.ai.post({ - text: serifs.chart.post, - fileIds: [file.id] - }); - } - - @autobind - private async genChart(type, params?): Promise { - this.log('Chart data fetching...'); - - let chart; - - if (type === 'userNotes') { - const data = await this.ai.api('charts/user/notes', { - span: 'day', - limit: 30, - userId: params.user.id - }); - - chart = { - title: `@${params.user.username}ใ•ใ‚“ใฎๆŠ•็จฟๆ•ฐ`, - datasets: [{ - data: data.diffs.normal - }, { - data: data.diffs.reply - }, { - data: data.diffs.renote - }] - }; - } else if (type === 'followers') { - const data = await this.ai.api('charts/user/following', { - span: 'day', - limit: 30, - userId: params.user.id - }); - - chart = { - title: `@${params.user.username}ใ•ใ‚“ใฎใƒ•ใ‚ฉใƒญใƒฏใƒผๆ•ฐ`, - datasets: [{ - data: data.local.followers.total - }, { - data: data.remote.followers.total - }] - }; - } else if (type === 'notes') { - const data = await this.ai.api('charts/notes', { - span: 'day', - limit: 30, - }); - - chart = { - datasets: [{ - data: data.local.diffs.normal - }, { - data: data.local.diffs.reply - }, { - data: data.local.diffs.renote - }] - }; - } else { - const suffixes = ['ใฎๅฃฒใ‚ŠไธŠใ’', 'ใฎๆถˆ่ฒป', 'ใฎ็”Ÿ็”ฃ']; - - const limit = 30; - const diffRange = 150; - const datasetCount = 1 + Math.floor(Math.random() * 3); - - let datasets: any[] = []; - - for (let d = 0; d < datasetCount; d++) { - let values = [Math.random() * 1000]; - - for (let i = 1; i < limit; i++) { - const prev = values[i - 1]; - values.push(prev + ((Math.random() * (diffRange * 2)) - diffRange)); - } - - datasets.push({ - data: values - }); - } - - chart = { - title: items[Math.floor(Math.random() * items.length)] + suffixes[Math.floor(Math.random() * suffixes.length)], - datasets: datasets - }; - } - - this.log('Chart rendering...'); - const img = renderChart(chart); - - this.log('Image uploading...'); - const file = await this.ai.upload(img, { - filename: 'chart.png', - contentType: 'image/png' - }); - - return file; - } - - @autobind - private async mentionHook(msg: Message) { - if (!msg.includes(['ใƒใƒฃใƒผใƒˆ'])) { - return false; - } else { - this.log('Chart requested'); - } - - let type = 'random'; - if (msg.includes(['ใƒ•ใ‚ฉใƒญใƒฏใƒผ'])) type = 'followers'; - if (msg.includes(['ๆŠ•็จฟ'])) type = 'userNotes'; - - const file = await this.genChart(type, { - user: msg.user - }); - - this.log('Replying...'); - msg.reply(serifs.chart.foryou, { file }); - - return { - reaction: 'like' - }; - } -} diff --git a/src/modules/chart/render-chart.ts b/src/modules/chart/render-chart.ts deleted file mode 100644 index a17e804..0000000 --- a/src/modules/chart/render-chart.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { createCanvas, registerFont } from 'canvas'; - -const width = 1024 + 256; -const height = 512 + 256; -const margin = 128; -const titleTextSize = 35; - -const lineWidth = 16; -const yAxisThickness = 2; - -const colors = { - bg: '#434343', - text: '#e0e4cc', - yAxis: '#5a5a5a', - dataset: [ - '#ff4e50', - '#c2f725', - '#69d2e7', - '#f38630', - '#f9d423', - ] -}; - -const yAxisTicks = 4; - -type Chart = { - title?: string; - datasets: { - title?: string; - data: number[]; - }[]; -}; - -export function renderChart(chart: Chart) { - registerFont('./font.ttf', { family: 'CustomFont' }); - - const canvas = createCanvas(width, height); - const ctx = canvas.getContext('2d'); - ctx.antialias = 'default'; - - ctx.fillStyle = colors.bg; - ctx.beginPath(); - ctx.fillRect(0, 0, width, height); - - let chartAreaX = margin; - let chartAreaY = margin; - let chartAreaWidth = width - (margin * 2); - let chartAreaHeight = height - (margin * 2); - - // Draw title - if (chart.title) { - ctx.font = `${titleTextSize}px CustomFont`; - const t = ctx.measureText(chart.title); - ctx.fillStyle = colors.text; - ctx.fillText(chart.title, (width / 2) - (t.width / 2), 128); - - chartAreaY += titleTextSize; - chartAreaHeight -= titleTextSize; - } - - const xAxisCount = chart.datasets[0].data.length; - const serieses = chart.datasets.length; - - let lowerBound = Infinity; - let upperBound = -Infinity; - - for (let xAxis = 0; xAxis < xAxisCount; xAxis++) { - let v = 0; - for (let series = 0; series < serieses; series++) { - v += chart.datasets[series].data[xAxis]; - } - if (v > upperBound) upperBound = v; - if (v < lowerBound) lowerBound = v; - } - - // Calculate Y axis scale - const yAxisSteps = niceScale(lowerBound, upperBound, yAxisTicks); - const yAxisStepsMin = yAxisSteps[0]; - const yAxisStepsMax = yAxisSteps[yAxisSteps.length - 1]; - const yAxisRange = yAxisStepsMax - yAxisStepsMin; - - // Draw Y axis - ctx.lineWidth = yAxisThickness; - ctx.lineCap = 'round'; - ctx.strokeStyle = colors.yAxis; - for (let i = 0; i < yAxisSteps.length; i++) { - const step = yAxisSteps[yAxisSteps.length - i - 1]; - const y = i * (chartAreaHeight / (yAxisSteps.length - 1)); - ctx.beginPath(); - ctx.lineTo(chartAreaX, chartAreaY + y); - ctx.lineTo(chartAreaX + chartAreaWidth, chartAreaY + y); - ctx.stroke(); - - ctx.font = '20px CustomFont'; - ctx.fillStyle = colors.text; - ctx.fillText(step.toString(), chartAreaX, chartAreaY + y - 8); - } - - const newDatasets: any[] = []; - - for (let series = 0; series < serieses; series++) { - newDatasets.push({ - data: [] - }); - } - - for (let xAxis = 0; xAxis < xAxisCount; xAxis++) { - for (let series = 0; series < serieses; series++) { - newDatasets[series].data.push(chart.datasets[series].data[xAxis] / yAxisRange); - } - } - - const perXAxisWidth = chartAreaWidth / xAxisCount; - - let newUpperBound = -Infinity; - - for (let xAxis = 0; xAxis < xAxisCount; xAxis++) { - let v = 0; - for (let series = 0; series < serieses; series++) { - v += newDatasets[series].data[xAxis]; - } - if (v > newUpperBound) newUpperBound = v; - } - - // Draw X axis - ctx.lineWidth = lineWidth; - ctx.lineCap = 'round'; - - for (let xAxis = 0; xAxis < xAxisCount; xAxis++) { - const xAxisPerTypeHeights: number[] = []; - - for (let series = 0; series < serieses; series++) { - const v = newDatasets[series].data[xAxis]; - const vHeight = (v / newUpperBound) * (chartAreaHeight - ((yAxisStepsMax - upperBound) / yAxisStepsMax * chartAreaHeight)); - xAxisPerTypeHeights.push(vHeight); - } - - for (let series = serieses - 1; series >= 0; series--) { - ctx.strokeStyle = colors.dataset[series % colors.dataset.length]; - - let total = 0; - for (let i = 0; i < series; i++) { - total += xAxisPerTypeHeights[i]; - } - - const height = xAxisPerTypeHeights[series]; - - const x = chartAreaX + (perXAxisWidth * ((xAxisCount - 1) - xAxis)) + (perXAxisWidth / 2); - - const yTop = (chartAreaY + chartAreaHeight) - (total + height); - const yBottom = (chartAreaY + chartAreaHeight) - (total); - - ctx.globalAlpha = 1 - (xAxis / xAxisCount); - ctx.beginPath(); - ctx.lineTo(x, yTop); - ctx.lineTo(x, yBottom); - ctx.stroke(); - } - } - - return canvas.toBuffer(); -} - -// https://stackoverflow.com/questions/326679/choosing-an-attractive-linear-scale-for-a-graphs-y-axis -// https://github.com/apexcharts/apexcharts.js/blob/master/src/modules/Scales.js -// This routine creates the Y axis values for a graph. -function niceScale(lowerBound: number, upperBound: number, ticks: number): number[] { - if (lowerBound === 0 && upperBound === 0) return [0]; - - // Calculate Min amd Max graphical labels and graph - // increments. The number of ticks defaults to - // 10 which is the SUGGESTED value. Any tick value - // entered is used as a suggested value which is - // adjusted to be a 'pretty' value. - // - // Output will be an array of the Y axis values that - // encompass the Y values. - const steps: number[] = []; - - // Determine Range - const range = upperBound - lowerBound; - - let tiks = ticks + 1; - // Adjust ticks if needed - if (tiks < 2) { - tiks = 2; - } else if (tiks > 2) { - tiks -= 2; - } - - // Get raw step value - const tempStep = range / tiks; - - // Calculate pretty step value - const mag = Math.floor(Math.log10(tempStep)); - const magPow = Math.pow(10, mag); - const magMsd = (parseInt as any)(tempStep / magPow); - const stepSize = magMsd * magPow; - - // build Y label array. - // Lower and upper bounds calculations - const lb = stepSize * Math.floor(lowerBound / stepSize); - const ub = stepSize * Math.ceil(upperBound / stepSize); - // Build array - let val = lb; - while (1) { - steps.push(val); - val += stepSize; - if (val > ub) { - break; - } - } - - return steps; -} diff --git a/src/modules/dice/index.ts b/src/modules/dice/index.ts deleted file mode 100644 index 646ac01..0000000 --- a/src/modules/dice/index.ts +++ /dev/null @@ -1,40 +0,0 @@ -import autobind from 'autobind-decorator'; -import Module from '@/module'; -import Message from '@/message'; -import serifs from '@/serifs'; - -export default class extends Module { - public readonly name = 'dice'; - - @autobind - public install() { - return { - mentionHook: this.mentionHook - }; - } - - @autobind - private async mentionHook(msg: Message) { - if (msg.text == null) return false; - - const query = msg.text.match(/([0-9]+)[dD]([0-9]+)/); - - if (query == null) return false; - - const times = parseInt(query[1], 10); - const dice = parseInt(query[2], 10); - - if (times < 1 || times > 10) return false; - if (dice < 2 || dice > 1000) return false; - - const results: number[] = []; - - for (let i = 0; i < times; i++) { - results.push(Math.floor(Math.random() * dice) + 1); - } - - msg.reply(serifs.dice.done(results.join(' '))); - - return true; - } -} diff --git a/src/modules/emoji/index.ts b/src/modules/emoji/index.ts deleted file mode 100644 index 3dbd5b8..0000000 --- a/src/modules/emoji/index.ts +++ /dev/null @@ -1,151 +0,0 @@ -import autobind from 'autobind-decorator'; -import Module from '@/module'; -import Message from '@/message'; -import serifs from '@/serifs'; - -const hands = [ - '๐Ÿ‘', - '๐Ÿ‘', - '๐Ÿ‘Ž', - '๐Ÿ‘Š', - 'โœŠ', - ['๐Ÿค›', '๐Ÿคœ'], - ['๐Ÿคœ', '๐Ÿค›'], - '๐Ÿคž', - 'โœŒ', - '๐ŸคŸ', - '๐Ÿค˜', - '๐Ÿ‘Œ', - '๐Ÿ‘ˆ', - '๐Ÿ‘‰', - ['๐Ÿ‘ˆ', '๐Ÿ‘‰'], - ['๐Ÿ‘‰', '๐Ÿ‘ˆ'], - '๐Ÿ‘†', - '๐Ÿ‘‡', - 'โ˜', - ['โœ‹', '๐Ÿคš'], - '๐Ÿ–', - '๐Ÿ––', - '๐Ÿ‘‹', - '๐Ÿค™', - '๐Ÿ’ช', - ['๐Ÿ’ช', 'โœŒ'], - '๐Ÿ–•' -] - -const faces = [ - '๐Ÿ˜€', - '๐Ÿ˜ƒ', - '๐Ÿ˜„', - '๐Ÿ˜', - '๐Ÿ˜†', - '๐Ÿ˜…', - '๐Ÿ˜‚', - '๐Ÿคฃ', - 'โ˜บ๏ธ', - '๐Ÿ˜Š', - '๐Ÿ˜‡', - '๐Ÿ™‚', - '๐Ÿ™ƒ', - '๐Ÿ˜‰', - '๐Ÿ˜Œ', - '๐Ÿ˜', - '๐Ÿฅฐ', - '๐Ÿ˜˜', - '๐Ÿ˜—', - '๐Ÿ˜™', - '๐Ÿ˜š', - '๐Ÿ˜‹', - '๐Ÿ˜›', - '๐Ÿ˜', - '๐Ÿ˜œ', - '๐Ÿคช', - '๐Ÿคจ', - '๐Ÿง', - '๐Ÿค“', - '๐Ÿ˜Ž', - '๐Ÿคฉ', - '๐Ÿฅณ', - '๐Ÿ˜', - '๐Ÿ˜’', - '๐Ÿ˜ž', - '๐Ÿ˜”', - '๐Ÿ˜Ÿ', - '๐Ÿ˜•', - '๐Ÿ™', - 'โ˜น๏ธ', - '๐Ÿ˜ฃ', - '๐Ÿ˜–', - '๐Ÿ˜ซ', - '๐Ÿ˜ฉ', - '๐Ÿฅบ', - '๐Ÿ˜ข', - '๐Ÿ˜ญ', - '๐Ÿ˜ค', - '๐Ÿ˜ ', - '๐Ÿ˜ก', - '๐Ÿคฌ', - '๐Ÿคฏ', - '๐Ÿ˜ณ', - '๐Ÿ˜ฑ', - '๐Ÿ˜จ', - '๐Ÿ˜ฐ', - '๐Ÿ˜ฅ', - '๐Ÿ˜“', - '๐Ÿค—', - '๐Ÿค”', - '๐Ÿคญ', - '๐Ÿคซ', - '๐Ÿคฅ', - '๐Ÿ˜ถ', - '๐Ÿ˜', - '๐Ÿ˜‘', - '๐Ÿ˜ฌ', - '๐Ÿ™„', - '๐Ÿ˜ฏ', - '๐Ÿ˜ฆ', - '๐Ÿ˜ง', - '๐Ÿ˜ฎ', - '๐Ÿ˜ฒ', - '๐Ÿ˜ด', - '๐Ÿคค', - '๐Ÿ˜ช', - '๐Ÿ˜ต', - '๐Ÿค', - '๐Ÿฅด', - '๐Ÿคข', - '๐Ÿคฎ', - '๐Ÿคง', - '๐Ÿ˜ท', - '๐Ÿค’', - '๐Ÿค•', - '๐Ÿค‘', - '๐Ÿค ', - '๐Ÿ—ฟ', - '๐Ÿค–', - '๐Ÿ‘ฝ' -] - -export default class extends Module { - public readonly name = 'emoji'; - - @autobind - public install() { - return { - mentionHook: this.mentionHook - }; - } - - @autobind - private async mentionHook(msg: Message) { - if (msg.includes(['้ก”ๆ–‡ๅญ—', '็ตตๆ–‡ๅญ—', 'emoji', '็ฆ็ฌ‘ใ„'])) { - const hand = hands[Math.floor(Math.random() * hands.length)]; - const face = faces[Math.floor(Math.random() * faces.length)]; - const emoji = Array.isArray(hand) ? hand[0] + face + hand[1] : hand + face + hand; - msg.reply(serifs.emoji.suggest(emoji)); - return true; - } else { - return false; - } - } -} diff --git a/src/modules/guessing-game/index.ts b/src/modules/guessing-game/index.ts deleted file mode 100644 index d75acaf..0000000 --- a/src/modules/guessing-game/index.ts +++ /dev/null @@ -1,138 +0,0 @@ -import autobind from 'autobind-decorator'; -import * as loki from 'lokijs'; -import Module from '@/module'; -import Message from '@/message'; -import serifs from '@/serifs'; - -export default class extends Module { - public readonly name = 'guessingGame'; - - private guesses: loki.Collection<{ - userId: string; - secret: number; - tries: number[]; - isEnded: boolean; - startedAt: number; - endedAt: number | null; - }>; - - @autobind - public install() { - this.guesses = this.ai.getCollection('guessingGame', { - indices: ['userId'] - }); - - return { - mentionHook: this.mentionHook, - contextHook: this.contextHook - }; - } - - @autobind - private async mentionHook(msg: Message) { - if (!msg.includes(['ๆ•ฐๅฝ“ใฆ', 'ๆ•ฐใ‚ใฆ'])) return false; - - const exist = this.guesses.findOne({ - userId: msg.userId, - isEnded: false - }); - - if (!msg.isDm) { - if (exist != null) { - msg.reply(serifs.guessingGame.alreadyStarted); - } else { - msg.reply(serifs.guessingGame.plzDm); - } - - return true; - } - - const secret = Math.floor(Math.random() * 100); - - this.guesses.insertOne({ - userId: msg.userId, - secret: secret, - tries: [], - isEnded: false, - startedAt: Date.now(), - endedAt: null - }); - - msg.reply(serifs.guessingGame.started).then(reply => { - this.subscribeReply(msg.userId, msg.isDm, msg.isDm ? msg.userId : reply.id); - }); - - return true; - } - - @autobind - private async contextHook(key: any, msg: Message) { - if (msg.text == null) return; - - const exist = this.guesses.findOne({ - userId: msg.userId, - isEnded: false - }); - - // ๅ‡ฆ็†ใฎๆตใ‚ŒไธŠใ€ๅฎŸ้š›ใซnullใซใชใ‚‹ใ“ใจใฏ็„กใ•ใใ†ใ ใ‘ใฉไธ€ๅฟœ - if (exist == null) { - this.unsubscribeReply(key); - return; - } - - if (msg.text.includes('ใ‚„ใ‚')) { - msg.reply(serifs.guessingGame.cancel); - exist.isEnded = true; - exist.endedAt = Date.now(); - this.guesses.update(exist); - this.unsubscribeReply(key); - return; - } - - const guess = msg.extractedText.match(/[0-9]+/); - - if (guess == null) { - msg.reply(serifs.guessingGame.nan).then(reply => { - this.subscribeReply(msg.userId, msg.isDm, reply.id); - }); - return; - } - - if (guess.length > 3) return; - - const g = parseInt(guess[0], 10); - const firsttime = exist.tries.indexOf(g) === -1; - - exist.tries.push(g); - - let text: string; - let end = false; - - if (exist.secret < g) { - text = firsttime - ? serifs.guessingGame.less(g.toString()) - : serifs.guessingGame.lessAgain(g.toString()); - } else if (exist.secret > g) { - text = firsttime - ? serifs.guessingGame.grater(g.toString()) - : serifs.guessingGame.graterAgain(g.toString()); - } else { - end = true; - text = serifs.guessingGame.congrats(exist.tries.length.toString()); - } - - if (end) { - exist.isEnded = true; - exist.endedAt = Date.now(); - this.unsubscribeReply(key); - } - - this.guesses.update(exist); - - msg.reply(text).then(reply => { - if (!end) { - this.subscribeReply(msg.userId, msg.isDm, reply.id); - } - }); - } -} diff --git a/src/modules/kazutori/index.ts b/src/modules/kazutori/index.ts deleted file mode 100644 index d2cd607..0000000 --- a/src/modules/kazutori/index.ts +++ /dev/null @@ -1,212 +0,0 @@ -import autobind from 'autobind-decorator'; -import * as loki from 'lokijs'; -import Module from '@/module'; -import Message from '@/message'; -import serifs from '@/serifs'; -import { User } from '@/misskey/user'; -import { acct } from '@/utils/acct'; - -type Game = { - votes: { - user: { - id: string; - username: string; - host: User['host']; - }; - number: number; - }[]; - isEnded: boolean; - startedAt: number; - postId: string; -}; - -const limitMinutes = 10; - -export default class extends Module { - public readonly name = 'kazutori'; - - private games: loki.Collection; - - @autobind - public install() { - this.games = this.ai.getCollection('kazutori'); - - this.crawleGameEnd(); - setInterval(this.crawleGameEnd, 1000); - - return { - mentionHook: this.mentionHook, - contextHook: this.contextHook - }; - } - - @autobind - private async mentionHook(msg: Message) { - if (!msg.includes(['ๆ•ฐๅ–ใ‚Š'])) return false; - - const games = this.games.find({}); - - const recentGame = games.length == 0 ? null : games[games.length - 1]; - - if (recentGame) { - // ็พๅœจใ‚ขใ‚ฏใƒ†ใ‚ฃใƒ–ใชใ‚ฒใƒผใƒ ใŒใ‚ใ‚‹ๅ ดๅˆ - if (!recentGame.isEnded) { - msg.reply(serifs.kazutori.alreadyStarted, { - renote: recentGame.postId - }); - return true; - } - - // ็›ด่ฟ‘ใฎใ‚ฒใƒผใƒ ใ‹ใ‚‰1ๆ™‚้–“็ตŒใฃใฆใชใ„ๅ ดๅˆ - if (Date.now() - recentGame.startedAt < 1000 * 60 * 60) { - msg.reply(serifs.kazutori.matakondo); - return true; - } - } - - const post = await this.ai.post({ - text: serifs.kazutori.intro(limitMinutes) - }); - - this.games.insertOne({ - votes: [], - isEnded: false, - startedAt: Date.now(), - postId: post.id - }); - - this.subscribeReply(null, false, post.id); - - this.log('New kazutori game started'); - - return true; - } - - @autobind - private async contextHook(key: any, msg: Message) { - if (msg.text == null) return { - reaction: 'hmm' - }; - - const game = this.games.findOne({ - isEnded: false - }); - - // ๅ‡ฆ็†ใฎๆตใ‚ŒไธŠใ€ๅฎŸ้š›ใซnullใซใชใ‚‹ใ“ใจใฏ็„กใ•ใใ†ใ ใ‘ใฉไธ€ๅฟœ - if (game == null) return; - - // ๆ—ขใซๆ•ฐๅญ—ใ‚’ๅ–ใฃใฆใ„ใŸใ‚‰ - if (game.votes.some(x => x.user.id == msg.userId)) return { - reaction: 'confused' - }; - - const match = msg.extractedText.match(/[0-9]+/); - if (match == null) return { - reaction: 'hmm' - }; - - const num = parseInt(match[0], 10); - - // ๆ•ดๆ•ฐใ˜ใ‚ƒใชใ„ - if (!Number.isInteger(num)) return { - reaction: 'hmm' - }; - - // ็ฏ„ๅ›ฒๅค– - if (num < 0 || num > 100) return { - reaction: 'confused' - }; - - this.log(`Voted ${num} by ${msg.user.id}`); - - // ๆŠ•็ฅจ - game.votes.push({ - user: { - id: msg.user.id, - username: msg.user.username, - host: msg.user.host - }, - number: num - }); - - this.games.update(game); - - return { - reaction: 'like' - }; - } - - /** - * ็ต‚ไบ†ใ™ในใใ‚ฒใƒผใƒ ใŒใชใ„ใ‹ใƒใ‚งใƒƒใ‚ฏ - */ - @autobind - private crawleGameEnd() { - const game = this.games.findOne({ - isEnded: false - }); - - if (game == null) return; - - // ๅˆถ้™ๆ™‚้–“ใŒ็ตŒ้Žใ—ใฆใ„ใŸใ‚‰ - if (Date.now() - game.startedAt >= 1000 * 60 * limitMinutes) { - this.finish(game); - } - } - - /** - * ใ‚ฒใƒผใƒ ใ‚’็ต‚ใ‚ใ‚‰ใ›ใ‚‹ - */ - @autobind - private finish(game: Game) { - game.isEnded = true; - this.games.update(game); - - this.log('Kazutori game finished'); - - // ใŠๆตใ‚Œ - if (game.votes.length <= 1) { - this.ai.post({ - text: serifs.kazutori.onagare, - renoteId: game.postId - }); - - return; - } - - let results: string[] = []; - let winner: Game['votes'][0]['user'] | null = null; - - for (let i = 100; i >= 0; i--) { - const users = game.votes - .filter(x => x.number == i) - .map(x => x.user); - - if (users.length == 1) { - if (winner == null) { - winner = users[0]; - const icon = i == 100 ? '๐Ÿ’ฏ' : '๐ŸŽ‰'; - results.push(`${icon} **${i}**: $[jelly ${acct(users[0])}]`); - } else { - results.push(`โž– ${i}: ${acct(users[0])}`); - } - } else if (users.length > 1) { - results.push(`โŒ ${i}: ${users.map(u => acct(u)).join(' ')}`); - } - } - - const winnerFriend = winner ? this.ai.lookupFriend(winner.id) : null; - const name = winnerFriend ? winnerFriend.name : null; - - const text = results.join('\n') + '\n\n' + (winner - ? serifs.kazutori.finishWithWinner(acct(winner), name) - : serifs.kazutori.finishWithNoWinner); - - this.ai.post({ - text: text, - cw: serifs.kazutori.finish, - renoteId: game.postId - }); - - this.unsubscribeReply(null); - } -} diff --git a/src/modules/maze/gen-maze.ts b/src/modules/maze/gen-maze.ts deleted file mode 100644 index a14e4ee..0000000 --- a/src/modules/maze/gen-maze.ts +++ /dev/null @@ -1,224 +0,0 @@ -import * as gen from 'random-seed'; -import { CellType } from './maze'; - -const cellVariants = { - void: { - digg: { left: null, right: null, top: null, bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - empty: { - digg: { left: 'left', right: 'right', top: 'top', bottom: 'bottom' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - left: { - digg: { left: null, right: 'leftRight', top: 'leftTop', bottom: 'leftBottom' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - right: { - digg: { left: 'leftRight', right: null, top: 'rightTop', bottom: 'rightBottom' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - top: { - digg: { left: 'leftTop', right: 'rightTop', top: null, bottom: 'topBottom' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - bottom: { - digg: { left: 'leftBottom', right: 'rightBottom', top: 'topBottom', bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - leftTop: { - digg: { left: null, right: 'leftRightTop', top: null, bottom: 'leftTopBottom' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - leftBottom: { - digg: { left: null, right: 'leftRightBottom', top: 'leftTopBottom', bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - rightTop: { - digg: { left: 'leftRightTop', right: null, top: null, bottom: 'rightTopBottom' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - rightBottom: { - digg: { left: 'leftRightBottom', right: null, top: 'rightTopBottom', bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - leftRightTop: { - digg: { left: null, right: null, top: null, bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - leftRightBottom: { - digg: { left: null, right: null, top: null, bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - leftTopBottom: { - digg: { left: null, right: null, top: null, bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - rightTopBottom: { - digg: { left: null, right: null, top: null, bottom: null }, - cross: { left: false, right: false, top: false, bottom: false }, - }, - leftRight: { - digg: { left: null, right: null, top: 'leftRightTop', bottom: 'leftRightBottom' }, - cross: { left: false, right: false, top: true, bottom: true }, - }, - topBottom: { - digg: { left: 'leftTopBottom', right: 'rightTopBottom', top: null, bottom: null }, - cross: { left: true, right: true, top: false, bottom: false }, - }, - cross: { - digg: { left: 'cross', right: 'cross', top: 'cross', bottom: 'cross' }, - cross: { left: false, right: false, top: false, bottom: false }, - }, -} as { [k in CellType]: { - digg: { left: CellType | null; right: CellType | null; top: CellType | null; bottom: CellType | null; }; - cross: { left: boolean; right: boolean; top: boolean; bottom: boolean; }; -} }; - -type Dir = 'left' | 'right' | 'top' | 'bottom'; - -export function genMaze(seed, complexity?) { - const rand = gen.create(seed); - - let mazeSize; - if (complexity) { - if (complexity === 'veryEasy') mazeSize = 3 + rand(3); - if (complexity === 'easy') mazeSize = 8 + rand(8); - if (complexity === 'hard') mazeSize = 22 + rand(13); - if (complexity === 'veryHard') mazeSize = 40 + rand(20); - if (complexity === 'ai') mazeSize = 100; - } else { - mazeSize = 11 + rand(21); - } - - const donut = rand(3) === 0; - const donutWidth = 1 + Math.floor(mazeSize / 8) + rand(Math.floor(mazeSize / 4)); - - const straightMode = rand(3) === 0; - const straightness = 5 + rand(10); - - // maze (filled by 'empty') - const maze: CellType[][] = new Array(mazeSize); - for (let i = 0; i < mazeSize; i++) { - maze[i] = new Array(mazeSize).fill('empty'); - } - - if (donut) { - for (let y = 0; y < mazeSize; y++) { - for (let x = 0; x < mazeSize; x++) { - if (x > donutWidth && x < (mazeSize - 1) - donutWidth && y > donutWidth && y < (mazeSize - 1) - donutWidth) { - maze[x][y] = 'void'; - } - } - } - } - - function checkDiggable(x: number, y: number, dir: Dir) { - if (cellVariants[maze[x][y]].digg[dir] === null) return false; - - const newPos = - dir === 'top' ? { x: x, y: y - 1 } : - dir === 'bottom' ? { x: x, y: y + 1 } : - dir === 'left' ? { x: x - 1, y: y } : - dir === 'right' ? { x: x + 1, y: y } : - { x, y }; - - if (newPos.x < 0 || newPos.y < 0 || newPos.x >= mazeSize || newPos.y >= mazeSize) return false; - - const cell = maze[newPos.x][newPos.y]; - if (cell === 'void') return false; - if (cell === 'empty') return true; - if (cellVariants[cell].cross[dir] && checkDiggable(newPos.x, newPos.y, dir)) return true; - - return false; - } - - function diggFrom(x: number, y: number, prevDir?: Dir) { - const isUpDiggable = checkDiggable(x, y, 'top'); - const isRightDiggable = checkDiggable(x, y, 'right'); - const isDownDiggable = checkDiggable(x, y, 'bottom'); - const isLeftDiggable = checkDiggable(x, y, 'left'); - - if (!isUpDiggable && !isRightDiggable && !isDownDiggable && !isLeftDiggable) return; - - const dirs: Dir[] = []; - if (isUpDiggable) dirs.push('top'); - if (isRightDiggable) dirs.push('right'); - if (isDownDiggable) dirs.push('bottom'); - if (isLeftDiggable) dirs.push('left'); - - let dir: Dir; - if (straightMode && rand(straightness) !== 0) { - if (prevDir != null && dirs.includes(prevDir)) { - dir = prevDir; - } else { - dir = dirs[rand(dirs.length)]; - } - } else { - dir = dirs[rand(dirs.length)]; - } - - maze[x][y] = cellVariants[maze[x][y]].digg[dir]!; - - if (dir === 'top') { - maze[x][y - 1] = maze[x][y - 1] === 'empty' ? 'bottom' : 'cross'; - diggFrom(x, y - 1, dir); - return; - } - if (dir === 'right') { - maze[x + 1][y] = maze[x + 1][y] === 'empty' ? 'left' : 'cross'; - diggFrom(x + 1, y, dir); - return; - } - if (dir === 'bottom') { - maze[x][y + 1] = maze[x][y + 1] === 'empty' ? 'top' : 'cross'; - diggFrom(x, y + 1, dir); - return; - } - if (dir === 'left') { - maze[x - 1][y] = maze[x - 1][y] === 'empty' ? 'right' : 'cross'; - diggFrom(x - 1, y, dir); - return; - } - } - - //#region start digg - const nonVoidCells: [number, number][] = []; - - for (let y = 0; y < mazeSize; y++) { - for (let x = 0; x < mazeSize; x++) { - const cell = maze[x][y]; - if (cell !== 'void') nonVoidCells.push([x, y]); - } - } - - const origin = nonVoidCells[rand(nonVoidCells.length)]; - - diggFrom(origin[0], origin[1]); - //#endregion - - let hasEmptyCell = true; - while (hasEmptyCell) { - const nonEmptyCells: [number, number][] = []; - - for (let y = 0; y < mazeSize; y++) { - for (let x = 0; x < mazeSize; x++) { - const cell = maze[x][y]; - if (cell !== 'empty' && cell !== 'void' && cell !== 'cross') nonEmptyCells.push([x, y]); - } - } - - const pos = nonEmptyCells[rand(nonEmptyCells.length)]; - - diggFrom(pos[0], pos[1]); - - hasEmptyCell = false; - for (let y = 0; y < mazeSize; y++) { - for (let x = 0; x < mazeSize; x++) { - if (maze[x][y] === 'empty') hasEmptyCell = true; - } - } - } - - return maze; -} diff --git a/src/modules/maze/index.ts b/src/modules/maze/index.ts deleted file mode 100644 index 8311e94..0000000 --- a/src/modules/maze/index.ts +++ /dev/null @@ -1,80 +0,0 @@ -import autobind from 'autobind-decorator'; -import Module from '@/module'; -import serifs from '@/serifs'; -import { genMaze } from './gen-maze'; -import { renderMaze } from './render-maze'; -import Message from '@/message'; - -export default class extends Module { - public readonly name = 'maze'; - - @autobind - public install() { - this.post(); - setInterval(this.post, 1000 * 60 * 3); - - return { - mentionHook: this.mentionHook - }; - } - - @autobind - private async post() { - const now = new Date(); - if (now.getHours() !== 22) return; - const date = `${now.getFullYear()}-${now.getMonth()}-${now.getDate()}`; - const data = this.getData(); - if (data.lastPosted == date) return; - data.lastPosted = date; - this.setData(data); - - this.log('Time to maze'); - const file = await this.genMazeFile(date); - - this.log('Posting...'); - this.ai.post({ - text: serifs.maze.post, - fileIds: [file.id] - }); - } - - @autobind - private async genMazeFile(seed, size?): Promise { - this.log('Maze generating...'); - const maze = genMaze(seed, size); - - this.log('Maze rendering...'); - const data = renderMaze(seed, maze); - - this.log('Image uploading...'); - const file = await this.ai.upload(data, { - filename: 'maze.png', - contentType: 'image/png' - }); - - return file; - } - - @autobind - private async mentionHook(msg: Message) { - if (msg.includes(['่ฟท่ทฏ'])) { - let size: string | null = null; - if (msg.includes(['ๆŽฅๅพ…'])) size = 'veryEasy'; - if (msg.includes(['็ฐกๅ˜', 'ใ‹ใ‚“ใŸใ‚“', 'ๆ˜“ใ—ใ„', 'ใ‚„ใ•ใ—ใ„', 'ๅฐใ•ใ„', 'ใกใ„ใ•ใ„'])) size = 'easy'; - if (msg.includes(['้›ฃใ—ใ„', 'ใ‚€ใšใ‹ใ—ใ„', '่ค‡้›‘ใช', 'ๅคงใใ„', 'ใŠใŠใใ„'])) size = 'hard'; - if (msg.includes(['ๆญป', '้ฌผ', 'ๅœฐ็„'])) size = 'veryHard'; - if (msg.includes(['่—']) && msg.includes(['ๆœฌๆฐ—'])) size = 'ai'; - this.log('Maze requested'); - setTimeout(async () => { - const file = await this.genMazeFile(Date.now(), size); - this.log('Replying...'); - msg.reply(serifs.maze.foryou, { file }); - }, 3000); - return { - reaction: 'like' - }; - } else { - return false; - } - } -} diff --git a/src/modules/maze/maze.ts b/src/modules/maze/maze.ts deleted file mode 100644 index 35d43ee..0000000 --- a/src/modules/maze/maze.ts +++ /dev/null @@ -1 +0,0 @@ -export type CellType = 'void' | 'empty' | 'left' | 'right' | 'top' | 'bottom' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom' | 'leftRightTop' | 'leftRightBottom' | 'leftTopBottom' | 'rightTopBottom' | 'leftRight' | 'topBottom' | 'cross'; diff --git a/src/modules/maze/render-maze.ts b/src/modules/maze/render-maze.ts deleted file mode 100644 index 6f4f5da..0000000 --- a/src/modules/maze/render-maze.ts +++ /dev/null @@ -1,243 +0,0 @@ -import * as gen from 'random-seed'; -import { createCanvas } from 'canvas'; - -import { CellType } from './maze'; -import { themes } from './themes'; - -const imageSize = 4096; // px -const margin = 96 * 4; -const mazeAreaSize = imageSize - (margin * 2); - -export function renderMaze(seed, maze: CellType[][]) { - const rand = gen.create(seed); - const mazeSize = maze.length; - - const colors = themes[rand(themes.length)]; - - const canvas = createCanvas(imageSize, imageSize); - const ctx = canvas.getContext('2d'); - ctx.antialias = 'none'; - - ctx.fillStyle = colors.bg1; - ctx.beginPath(); - ctx.fillRect(0, 0, imageSize, imageSize); - - ctx.fillStyle = colors.bg2; - ctx.beginPath(); - ctx.fillRect(margin / 2, margin / 2, imageSize - ((margin / 2) * 2), imageSize - ((margin / 2) * 2)); - - // Draw - function drawCell(ctx, x, y, size, left, right, top, bottom, mark) { - const wallThickness = size / 6; - const margin = size / 6; - const markerMargin = size / 3; - - ctx.fillStyle = colors.road; - if (left) { - ctx.beginPath(); - ctx.fillRect(x, y + margin, size - margin, size - (margin * 2)); - } - if (right) { - ctx.beginPath(); - ctx.fillRect(x + margin, y + margin, size - margin, size - (margin * 2)); - } - if (top) { - ctx.beginPath(); - ctx.fillRect(x + margin, y, size - (margin * 2), size - margin); - } - if (bottom) { - ctx.beginPath(); - ctx.fillRect(x + margin, y + margin, size - (margin * 2), size - margin); - } - - if (mark) { - ctx.fillStyle = colors.marker; - ctx.beginPath(); - ctx.fillRect(x + markerMargin, y + markerMargin, size - (markerMargin * 2), size - (markerMargin * 2)); - } - - ctx.strokeStyle = colors.wall; - ctx.lineWidth = wallThickness; - ctx.lineCap = 'square'; - - function line(ax, ay, bx, by) { - ctx.beginPath(); - ctx.lineTo(x + ax, y + ay); - ctx.lineTo(x + bx, y + by); - ctx.stroke(); - } - - if (left && right && top && bottom) { - ctx.beginPath(); - if (rand(2) === 0) { - line(0, margin, size, margin); // โ”€ ไธŠ - line(0, size - margin, size, size - margin); // โ”€ ไธ‹ - line(margin, 0, margin, margin); // โ”‚ ๅทฆไธŠ - line(size - margin, 0, size - margin, margin); // โ”‚ ๅณไธŠ - line(margin, size - margin, margin, size); // โ”‚ ๅทฆไธ‹ - line(size - margin, size - margin, size - margin, size); // โ”‚ ๅณไธ‹ - } else { - line(margin, 0, margin, size); // โ”‚ ๅทฆ - line(size - margin, 0, size - margin, size); // โ”‚ ๅณ - line(0, margin, margin, margin); // โ”€ ๅทฆไธŠ - line(size - margin, margin, size, margin); // โ”€ ๅณไธŠ - line(0, size - margin, margin, size - margin); // โ”€ ๅทฆไธ‹ - line(size - margin, size - margin, size, size - margin); // โ”€ ๅณไธ‹ - } - return; - } - - // โ”€ - if (left && right && !top && !bottom) { - line(0, margin, size, margin); // โ”€ ไธŠ - line(0, size - margin, size, size - margin); // โ”€ ไธ‹ - return; - } - - // โ”‚ - if (!left && !right && top && bottom) { - line(margin, 0, margin, size); // โ”‚ ๅทฆ - line(size - margin, 0, size - margin, size); // โ”‚ ๅณ - return; - } - - // ๅทฆ่กŒใๆญขใพใ‚Š - if (!left && right && !top && !bottom) { - line(margin, margin, size, margin); // โ”€ ไธŠ - line(margin, margin, margin, size - margin); // โ”‚ ๅทฆ - line(margin, size - margin, size, size - margin); // โ”€ ไธ‹ - return; - } - - // ๅณ่กŒใๆญขใพใ‚Š - if (left && !right && !top && !bottom) { - line(0, margin, size - margin, margin); // โ”€ ไธŠ - line(size - margin, margin, size - margin, size - margin); // โ”‚ ๅณ - line(0, size - margin, size - margin, size - margin); // โ”€ ไธ‹ - return; - } - - // ไธŠ่กŒใๆญขใพใ‚Š - if (!left && !right && !top && bottom) { - line(margin, margin, size - margin, margin); // โ”€ ไธŠ - line(margin, margin, margin, size); // โ”‚ ๅทฆ - line(size - margin, margin, size - margin, size); // โ”‚ ๅณ - return; - } - - // ไธ‹่กŒใๆญขใพใ‚Š - if (!left && !right && top && !bottom) { - line(margin, size - margin, size - margin, size - margin); // โ”€ ไธ‹ - line(margin, 0, margin, size - margin); // โ”‚ ๅทฆ - line(size - margin, 0, size - margin, size - margin); // โ”‚ ๅณ - return; - } - - // โ”Œ - if (!left && !top && right && bottom) { - line(margin, margin, size, margin); // โ”€ ไธŠ - line(margin, margin, margin, size); // โ”‚ ๅทฆ - line(size - margin, size - margin, size, size - margin); // โ”€ ไธ‹ - line(size - margin, size - margin, size - margin, size); // โ”‚ ๅณ - return; - } - - // โ” - if (left && !right && !top && bottom) { - line(0, margin, size - margin, margin); // โ”€ ไธŠ - line(size - margin, margin, size - margin, size); // โ”‚ ๅณ - line(0, size - margin, margin, size - margin); // โ”€ ไธ‹ - line(margin, size - margin, margin, size); // โ”‚ ๅทฆ - return; - } - - // โ”” - if (!left && right && top && !bottom) { - line(margin, 0, margin, size - margin); // โ”‚ ๅทฆ - line(margin, size - margin, size, size - margin); // โ”€ ไธ‹ - line(size - margin, 0, size - margin, margin); // โ”‚ ๅณ - line(size - margin, margin, size, margin); // โ”€ ไธŠ - return; - } - - // โ”˜ - if (left && !right && top && !bottom) { - line(margin, 0, margin, margin); // โ”‚ ๅทฆ - line(0, margin, margin, margin); // โ”€ ไธŠ - line(size - margin, 0, size - margin, size - margin); // โ”‚ ๅณ - line(0, size - margin, size - margin, size - margin); // โ”€ ไธ‹ - return; - } - - // โ”œ - if (!left && right && top && bottom) { - line(margin, 0, margin, size); // โ”‚ ๅทฆ - line(size - margin, 0, size - margin, margin); // โ”‚ ๅณ - line(size - margin, margin, size, margin); // โ”€ ไธŠ - line(size - margin, size - margin, size, size - margin); // โ”€ ไธ‹ - line(size - margin, size - margin, size - margin, size); // โ”‚ ๅณ - return; - } - - // โ”ค - if (left && !right && top && bottom) { - line(size - margin, 0, size - margin, size); // โ”‚ ๅณ - line(margin, 0, margin, margin); // โ”‚ ๅทฆ - line(0, margin, margin, margin); // โ”€ ไธŠ - line(0, size - margin, margin, size - margin); // โ”€ ไธ‹ - line(margin, size - margin, margin, size); // โ”‚ ๅทฆ - return; - } - - // โ”ฌ - if (left && right && !top && bottom) { - line(0, margin, size, margin); // โ”€ ไธŠ - line(0, size - margin, margin, size - margin); // โ”€ ไธ‹ - line(margin, size - margin, margin, size); // โ”‚ ๅทฆ - line(size - margin, size - margin, size, size - margin); // โ”€ ไธ‹ - line(size - margin, size - margin, size - margin, size); // โ”‚ ๅณ - return; - } - - // โ”ด - if (left && right && top && !bottom) { - line(0, size - margin, size, size - margin); // โ”€ ไธ‹ - line(margin, 0, margin, margin); // โ”‚ ๅทฆ - line(0, margin, margin, margin); // โ”€ ไธŠ - line(size - margin, 0, size - margin, margin); // โ”‚ ๅณ - line(size - margin, margin, size, margin); // โ”€ ไธŠ - return; - } - } - - const cellSize = mazeAreaSize / mazeSize; - - for (let x = 0; x < mazeSize; x++) { - for (let y = 0; y < mazeSize; y++) { - const actualX = margin + (cellSize * x); - const actualY = margin + (cellSize * y); - - const cell = maze[x][y]; - - const mark = (x === 0 && y === 0) || (x === mazeSize - 1 && y === mazeSize - 1); - - if (cell === 'left') drawCell(ctx, actualX, actualY, cellSize, true, false, false, false, mark); - if (cell === 'right') drawCell(ctx, actualX, actualY, cellSize, false, true, false, false, mark); - if (cell === 'top') drawCell(ctx, actualX, actualY, cellSize, false, false, true, false, mark); - if (cell === 'bottom') drawCell(ctx, actualX, actualY, cellSize, false, false, false, true, mark); - if (cell === 'leftTop') drawCell(ctx, actualX, actualY, cellSize, true, false, true, false, mark); - if (cell === 'leftBottom') drawCell(ctx, actualX, actualY, cellSize, true, false, false, true, mark); - if (cell === 'rightTop') drawCell(ctx, actualX, actualY, cellSize, false, true, true, false, mark); - if (cell === 'rightBottom') drawCell(ctx, actualX, actualY, cellSize, false, true, false, true, mark); - if (cell === 'leftRightTop') drawCell(ctx, actualX, actualY, cellSize, true, true, true, false, mark); - if (cell === 'leftRightBottom') drawCell(ctx, actualX, actualY, cellSize, true, true, false, true, mark); - if (cell === 'leftTopBottom') drawCell(ctx, actualX, actualY, cellSize, true, false, true, true, mark); - if (cell === 'rightTopBottom') drawCell(ctx, actualX, actualY, cellSize, false, true, true, true, mark); - if (cell === 'leftRight') drawCell(ctx, actualX, actualY, cellSize, true, true, false, false, mark); - if (cell === 'topBottom') drawCell(ctx, actualX, actualY, cellSize, false, false, true, true, mark); - if (cell === 'cross') drawCell(ctx, actualX, actualY, cellSize, true, true, true, true, mark); - } - } - - return canvas.toBuffer(); -} diff --git a/src/modules/maze/themes.ts b/src/modules/maze/themes.ts deleted file mode 100644 index 83115df..0000000 --- a/src/modules/maze/themes.ts +++ /dev/null @@ -1,55 +0,0 @@ -export const themes = [{ - bg1: '#C1D9CE', - bg2: '#F2EDD5', - wall: '#0F8AA6', - road: '#C1D9CE', - marker: '#84BFBF', -}, { - bg1: '#17275B', - bg2: '#1F2E67', - wall: '#17275B', - road: '#6A77A4', - marker: '#E6E5E3', -}, { - bg1: '#BFD962', - bg2: '#EAF2AC', - wall: '#1E4006', - road: '#BFD962', - marker: '#74A608', -}, { - bg1: '#C0CCB8', - bg2: '#FFE2C0', - wall: '#664A3C', - road: '#FFCB99', - marker: '#E78F72', -}, { - bg1: '#101010', - bg2: '#151515', - wall: '#909090', - road: '#202020', - marker: '#606060', -}, { - bg1: '#e0e0e0', - bg2: '#f2f2f2', - wall: '#a0a0a0', - road: '#e0e0e0', - marker: '#707070', -}, { - bg1: '#7DE395', - bg2: '#D0F3CF', - wall: '#349D9E', - road: '#7DE395', - marker: '#56C495', -}, { - bg1: '#C9EEEA', - bg2: '#DBF4F1', - wall: '#4BC6B9', - road: '#C9EEEA', - marker: '#19A89D', -}, { - bg1: '#1e231b', - bg2: '#27331e', - wall: '#67b231', - road: '#385622', - marker: '#78d337', -}]; diff --git a/src/modules/poll/index.ts b/src/modules/poll/index.ts deleted file mode 100644 index a5339f5..0000000 --- a/src/modules/poll/index.ts +++ /dev/null @@ -1,146 +0,0 @@ -import autobind from 'autobind-decorator'; -import Message from '@/message'; -import Module from '@/module'; -import serifs from '@/serifs'; -import { genItem } from '@/vocabulary'; -import config from '@/config'; -import { Note } from '@/misskey/note'; - -export default class extends Module { - public readonly name = 'poll'; - - @autobind - public install() { - setInterval(() => { - if (Math.random() < 0.1) { - this.post(); - } - }, 1000 * 60 * 60); - - return { - mentionHook: this.mentionHook, - timeoutCallback: this.timeoutCallback, - }; - } - - @autobind - private async post() { - const duration = 1000 * 60 * 15; - - const polls = [ // TODO: Extract serif - ['็ใ—ใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“็ใ—ใ„ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['็พŽๅ‘ณใ—ใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“็พŽๅ‘ณใ—ใ„ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['้‡ใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“้‡ใ„ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๆฌฒใ—ใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“ๆฌฒใ—ใ„ใงใ™ใ‹๏ผŸ'], - ['็„กไบบๅณถใซๆŒใฃใฆใ„ใใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€็„กไบบๅณถใซใฒใจใคๆŒใฃใฆใ„ใ‘ใ‚‹ใจใ—ใŸใ‚‰ใฉใ‚Œใซใ—ใพใ™ใ‹๏ผŸ'], - ['ๅฎถใซ้ฃพใ‚ŠใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ๅฎถใซ้ฃพใ‚‹ใจใ—ใŸใ‚‰ใฉใ‚Œใซใ—ใพใ™ใ‹๏ผŸ'], - ['ๅฃฒใ‚Œใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“ๅฃฒใ‚Œใใ†ใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['้™ใฃใฆใใฆใปใ—ใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒ็ฉบใ‹ใ‚‰้™ใฃใฆใใฆใปใ—ใ„ใงใ™ใ‹๏ผŸ'], - ['ๆบๅธฏใ—ใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚Œใ‚’ๆบๅธฏใ—ใŸใ„ใงใ™ใ‹๏ผŸ'], - ['ๅ•†ๅ“ๅŒ–ใ—ใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ๅ•†ๅ“ๅŒ–ใ™ใ‚‹ใจใ—ใŸใ‚‰ใฉใ‚Œใซใ—ใพใ™ใ‹๏ผŸ'], - ['็™บๆŽ˜ใ•ใ‚Œใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€้บ่ทกใ‹ใ‚‰็™บๆŽ˜ใ•ใ‚Œใใ†ใชใ‚‚ใฎใฏใฉใ‚Œใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['่‰ฏใ„้ฆ™ใ‚ŠใŒใ—ใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“ใ„ใ„้ฆ™ใ‚ŠใŒใ™ใ‚‹ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['้ซ˜ๅ€คใงๅ–ๅผ•ใ•ใ‚Œใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒใ„ใกใฐใ‚“้ซ˜ๅ€คใงๅ–ๅผ•ใ•ใ‚Œใ‚‹ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๅœฐ็ƒๅ‘จๅ›ž่ปŒ้“ไธŠใซใ‚ใ‚Šใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒๅœฐ็ƒๅ‘จๅ›ž่ปŒ้“ไธŠใ‚’ๆผ‚ใฃใฆใ„ใใ†ใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ใƒ—ใƒฌใ‚ผใƒณใƒˆใ—ใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€็งใซใƒ—ใƒฌใ‚ผใƒณใƒˆใ—ใฆใใ‚Œใ‚‹ใจใ—ใŸใ‚‰ใฉใ‚Œใซใ—ใพใ™ใ‹๏ผŸ'], - ['ใƒ—ใƒฌใ‚ผใƒณใƒˆใ•ใ‚ŒใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใƒ—ใƒฌใ‚ผใƒณใƒˆใงใ‚‚ใ‚‰ใ†ใจใ—ใŸใ‚‰ใฉใ‚Œใซใ—ใพใ™ใ‹๏ผŸ'], - ['็งใŒๆŒใฃใฆใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€็งใŒๆŒใฃใฆใใ†ใชใ‚‚ใฎใฏใฉใ‚Œใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๆต่กŒใ‚Šใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒๆต่กŒใ‚Šใใ†ใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๆœใ”ใฏใ‚“', 'ใฟใชใ•ใ‚“ใฏใ€ๆœใ”ใฏใ‚“ใซใฉใ‚ŒใŒ้ฃŸในใŸใ„ใงใ™ใ‹๏ผŸ'], - ['ใŠๆ˜ผใ”ใฏใ‚“', 'ใฟใชใ•ใ‚“ใฏใ€ใŠๆ˜ผใ”ใฏใ‚“ใซใฉใ‚ŒใŒ้ฃŸในใŸใ„ใงใ™ใ‹๏ผŸ'], - ['ใŠๅค•้ฃฏ', 'ใฟใชใ•ใ‚“ใฏใ€ใŠๅค•้ฃฏใซใฉใ‚ŒใŒ้ฃŸในใŸใ„ใงใ™ใ‹๏ผŸ'], - ['ไฝ“ใซ่‰ฏใ•ใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒไฝ“ใซ่‰ฏใ•ใใ†ใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๅพŒไธ–ใซ้บใ—ใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚Œใ‚’ๅพŒไธ–ใซ้บใ—ใŸใ„ใงใ™ใ‹๏ผŸ'], - ['ๆฅฝๅ™จใซใชใ‚Šใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒๆฅฝๅ™จใซใชใ‚Šใใ†ใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ใŠๅ‘ณๅ™Œๆฑใฎๅ…ทใซใ—ใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใŠๅ‘ณๅ™Œๆฑใฎๅ…ทใซใ™ใ‚‹ใจใ—ใŸใ‚‰ใฉใ‚ŒใŒใ„ใ„ใงใ™ใ‹๏ผŸ'], - ['ใตใ‚Šใ‹ใ‘ใซใ—ใŸใ„ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚Œใ‚’ใ”ใฏใ‚“ใซใตใ‚Šใ‹ใ‘ใŸใ„ใงใ™ใ‹๏ผŸ'], - ['ใ‚ˆใ่ฆ‹ใ‹ใ‘ใ‚‹ใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚Œใ‚’ใ‚ˆใ่ฆ‹ใ‹ใ‘ใพใ™ใ‹๏ผŸ'], - ['้“ใซ่ฝใกใฆใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€้“็ซฏใซ่ฝใกใฆใใ†ใชใ‚‚ใฎใฏใฉใ‚Œใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['็พŽ่ก“้คจใซ็ฝฎใ„ใฆใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ใ“ใฎไธญใง็พŽ่ก“้คจใซ็ฝฎใ„ใฆใ‚ใ‚Šใใ†ใชใ‚‚ใฎใฏใฉใ‚Œใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๆ•™ๅฎคใซใ‚ใ‚Šใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€ๆ•™ๅฎคใซใ‚ใ‚Šใใ†ใชใ‚‚ใฎใฃใฆใฉใ‚Œใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['็ตตๆ–‡ๅญ—ใซใชใฃใฆใปใ—ใ„ใ‚‚ใฎ', '็ตตๆ–‡ๅญ—ใซใชใฃใฆใปใ—ใ„ใ‚‚ใฎใฏใฉใ‚Œใงใ™ใ‹๏ผŸ'], - ['Misskeyๆœฌ้ƒจใซใ‚ใ‚Šใใ†ใชใ‚‚ใฎ', 'ใฟใชใ•ใ‚“ใฏใ€Misskeyๆœฌ้ƒจใซใ‚ใ‚Šใใ†ใชใ‚‚ใฎใฏใฉใ‚Œใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['็‡ƒใˆใ‚‹ใ‚ดใƒŸ', 'ใฟใชใ•ใ‚“ใฏใ€ใฉใ‚ŒใŒ็‡ƒใˆใ‚‹ใ‚ดใƒŸใ ใจๆ€ใ„ใพใ™ใ‹๏ผŸ'], - ['ๅฅฝใใชใŠใซใŽใ‚Šใฎๅ…ท', 'ใฟใชใ•ใ‚“ใฎๅฅฝใใชใŠใซใŽใ‚Šใฎๅ…ทใฏใชใ‚“ใงใ™ใ‹๏ผŸ'], - ]; - - const poll = polls[Math.floor(Math.random() * polls.length)]; - - const choices = [ - genItem(), - genItem(), - genItem(), - genItem(), - ]; - - const note = await this.ai.post({ - text: poll[1], - poll: { - choices, - expiredAfter: duration, - multiple: false, - } - }); - - // ใ‚ฟใ‚คใƒžใƒผใ‚ปใƒƒใƒˆ - this.setTimeoutWithPersistence(duration + 3000, { - title: poll[0], - noteId: note.id, - }); - } - - @autobind - private async mentionHook(msg: Message) { - if (!msg.or(['/poll']) || msg.user.username !== config.master) { - return false; - } else { - this.log('Manualy poll requested'); - } - - this.post(); - - return true; - } - - @autobind - private async timeoutCallback({ title, noteId }) { - const note: Note = await this.ai.api('notes/show', { noteId }); - - const choices = note.poll!.choices; - - let mostVotedChoice; - - for (const choice of choices) { - if (mostVotedChoice == null) { - mostVotedChoice = choice; - continue; - } - - if (choice.votes > mostVotedChoice.votes) { - mostVotedChoice = choice; - } - } - - const mostVotedChoices = choices.filter(choice => choice.votes === mostVotedChoice.votes); - - if (mostVotedChoice.votes === 0) { - this.ai.post({ // TODO: Extract serif - text: 'ๆŠ•็ฅจใฏใ‚ใ‚Šใพใ›ใ‚“ใงใ—ใŸ', - renoteId: noteId, - }); - } else if (mostVotedChoices.length === 1) { - this.ai.post({ // TODO: Extract serif - cw: `${title}ใ‚ขใƒณใ‚ฑใƒผใƒˆใฎ็ตๆžœ็™บ่กจใงใ™๏ผ`, - text: `็ตๆžœใฏ${mostVotedChoice.votes}็ฅจใฎใ€Œ${mostVotedChoice.text}ใ€ใงใ—ใŸ๏ผ`, - renoteId: noteId, - }); - } else { - const choices = mostVotedChoices.map(choice => `ใ€Œ${choice.text}ใ€`).join('ใจ'); - this.ai.post({ // TODO: Extract serif - cw: `${title}ใ‚ขใƒณใ‚ฑใƒผใƒˆใฎ็ตๆžœ็™บ่กจใงใ™๏ผ`, - text: `็ตๆžœใฏ${mostVotedChoice.votes}็ฅจใฎ${choices}ใงใ—ใŸ๏ผ`, - renoteId: noteId, - }); - } - } -} diff --git a/src/modules/reversi/back.ts b/src/modules/reversi/back.ts deleted file mode 100644 index b7b9d3d..0000000 --- a/src/modules/reversi/back.ts +++ /dev/null @@ -1,451 +0,0 @@ -/** - * -AI- - * Botใฎใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰(ๆ€่€ƒใ‚’ๆ‹…ๅฝ“) - * - * ๅฏพ่ฉฑใจๆ€่€ƒใ‚’ๅŒใ˜ใƒ—ใƒญใ‚ปใ‚นใง่กŒใ†ใจใ€ๆ€่€ƒๆ™‚้–“ใŒ้•ทๅผ•ใ„ใŸใจใใซใ‚นใƒˆใƒชใƒผใƒ ใ‹ใ‚‰ - * ๅˆ‡ๆ–ญใ•ใ‚Œใฆใ—ใพใ†ใฎใงใ€ๅˆฅใ€…ใฎใƒ—ใƒญใ‚ปใ‚นใง่กŒใ†ใ‚ˆใ†ใซใ—ใพใ™ - */ - -import 'module-alias/register'; - -import * as request from 'request-promise-native'; -import Reversi, { Color } from 'misskey-reversi'; -import config from '@/config'; -import serifs from '@/serifs'; -import { User } from '@/misskey/user'; - -function getUserName(user) { - return user.name || user.username; -} - -const titles = [ - 'ใ•ใ‚“', 'ใ‚ตใƒณ', '๏ฝป๏พ', 'ใŒ ', - 'ใกใ‚ƒใ‚“', 'ใƒใƒฃใƒณ', '๏พ๏ฝฌ๏พ', - 'ๅ›', 'ใใ‚“', 'ใ‚ฏใƒณ', '๏ฝธ๏พ', - 'ๅ…ˆ็”Ÿ', 'ใ›ใ‚“ใ›ใ„', 'ใ‚ปใƒณใ‚ปใ‚ค', '๏ฝพ๏พ๏ฝพ๏ฝฒ' -]; - -class Session { - private account: User; - private game: any; - private form: any; - private o: Reversi; - private botColor: Color; - - /** - * ้š…ๅ‘จ่พบใฎใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใƒชใ‚นใƒˆ(้™็š„่ฉ•ไพกใซๅˆฉ็”จ) - */ - private sumiNearIndexes: number[] = []; - - /** - * ้š…ใฎใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นใƒชใ‚นใƒˆ(้™็š„่ฉ•ไพกใซๅˆฉ็”จ) - */ - private sumiIndexes: number[] = []; - - /** - * ๆœ€ๅคงใฎใ‚ฟใƒผใƒณๆ•ฐ - */ - private maxTurn; - - /** - * ็พๅœจใฎใ‚ฟใƒผใƒณๆ•ฐ - */ - private currentTurn = 0; - - /** - * ๅฏพๅฑ€ใŒ้–‹ๅง‹ใ—ใŸใ“ใจใ‚’็Ÿฅใ‚‰ใ›ใŸๆŠ•็จฟ - */ - private startedNote: any = null; - - private get user(): User { - return this.game.user1Id == this.account.id ? this.game.user2 : this.game.user1; - } - - private get userName(): string { - const name = getUserName(this.user); - return `?[${name}](${config.host}/@${this.user.username})${titles.some(x => name.endsWith(x)) ? '' : 'ใ•ใ‚“'}`; - } - - private get strength(): number { - return this.form.find(i => i.id == 'strength').value; - } - - private get isSettai(): boolean { - return this.strength === 0; - } - - private get allowPost(): boolean { - return this.form.find(i => i.id == 'publish').value; - } - - private get url(): string { - return `${config.host}/games/reversi/${this.game.id}`; - } - - constructor() { - process.on('message', this.onMessage); - } - - private onMessage = async (msg: any) => { - switch (msg.type) { - case '_init_': this.onInit(msg.body); break; - case 'updateForm': this.onUpdateForn(msg.body); break; - case 'started': this.onStarted(msg.body); break; - case 'ended': this.onEnded(msg.body); break; - case 'set': this.onSet(msg.body); break; - } - } - - // ่ฆชใƒ—ใƒญใ‚ปใ‚นใ‹ใ‚‰ใƒ‡ใƒผใ‚ฟใ‚’ใ‚‚ใ‚‰ใ† - private onInit = (msg: any) => { - this.game = msg.game; - this.form = msg.form; - this.account = msg.account; - } - - /** - * ใƒ•ใ‚ฉใƒผใƒ ใŒๆ›ดๆ–ฐใ•ใ‚ŒใŸใจใ - */ - private onUpdateForn = (msg: any) => { - this.form.find(i => i.id == msg.id).value = msg.value; - } - - /** - * ๅฏพๅฑ€ใŒๅง‹ใพใฃใŸใจใ - */ - private onStarted = (msg: any) => { - this.game = msg; - - // TLใซๆŠ•็จฟใ™ใ‚‹ - this.postGameStarted().then(note => { - this.startedNote = note; - }); - - // ใƒชใƒใƒผใ‚ทใ‚จใƒณใ‚ธใƒณๅˆๆœŸๅŒ– - this.o = new Reversi(this.game.map, { - isLlotheo: this.game.isLlotheo, - canPutEverywhere: this.game.canPutEverywhere, - loopedBoard: this.game.loopedBoard - }); - - this.maxTurn = this.o.map.filter(p => p === 'empty').length - this.o.board.filter(x => x != null).length; - - //#region ้š…ใฎไฝ็ฝฎ่จˆ็ฎ—ใชใฉ - - //#region ้š… - this.o.map.forEach((pix, i) => { - if (pix == 'null') return; - - const [x, y] = this.o.transformPosToXy(i); - const get = (x, y) => { - if (x < 0 || y < 0 || x >= this.o.mapWidth || y >= this.o.mapHeight) return 'null'; - return this.o.mapDataGet(this.o.transformXyToPos(x, y)); - }; - - const isNotSumi = ( - // - - // + - // - - (get(x - 1, y - 1) == 'empty' && get(x + 1, y + 1) == 'empty') || - - // - - // + - // - - (get(x, y - 1) == 'empty' && get(x, y + 1) == 'empty') || - - // - - // + - // - - (get(x + 1, y - 1) == 'empty' && get(x - 1, y + 1) == 'empty') || - - // - // -+- - // - (get(x - 1, y) == 'empty' && get(x + 1, y) == 'empty') - ) - - const isSumi = !isNotSumi; - - if (isSumi) this.sumiIndexes.push(i); - }); - //#endregion - - //#region ้š…ใฎ้šฃ - this.o.map.forEach((pix, i) => { - if (pix == 'null') return; - if (this.sumiIndexes.includes(i)) return; - - const [x, y] = this.o.transformPosToXy(i); - - const check = (x, y) => { - if (x < 0 || y < 0 || x >= this.o.mapWidth || y >= this.o.mapHeight) return 0; - return this.sumiIndexes.includes(this.o.transformXyToPos(x, y)); - }; - - const isSumiNear = ( - check(x - 1, y - 1) || // ๅทฆไธŠ - check(x , y - 1) || // ไธŠ - check(x + 1, y - 1) || // ๅณไธŠ - check(x + 1, y ) || // ๅณ - check(x + 1, y + 1) || // ๅณไธ‹ - check(x , y + 1) || // ไธ‹ - check(x - 1, y + 1) || // ๅทฆไธ‹ - check(x - 1, y ) // ๅทฆ - ) - - if (isSumiNear) this.sumiNearIndexes.push(i); - }); - //#endregion - - //#endregion - - this.botColor = this.game.user1Id == this.account.id && this.game.black == 1 || this.game.user2Id == this.account.id && this.game.black == 2; - - if (this.botColor) { - this.think(); - } - } - - /** - * ๅฏพๅฑ€ใŒ็ต‚ใ‚ใฃใŸใจใ - */ - private onEnded = async (msg: any) => { - // ใ‚นใƒˆใƒชใƒผใƒ ใ‹ใ‚‰ๅˆ‡ๆ–ญ - process.send!({ - type: 'ended' - }); - - let text: string; - - if (msg.game.surrendered) { - if (this.isSettai) { - text = serifs.reversi.settaiButYouSurrendered(this.userName); - } else { - text = serifs.reversi.youSurrendered(this.userName); - } - } else if (msg.winnerId) { - if (msg.winnerId == this.account.id) { - if (this.isSettai) { - text = serifs.reversi.iWonButSettai(this.userName); - } else { - text = serifs.reversi.iWon(this.userName); - } - } else { - if (this.isSettai) { - text = serifs.reversi.iLoseButSettai(this.userName); - } else { - text = serifs.reversi.iLose(this.userName); - } - } - } else { - if (this.isSettai) { - text = serifs.reversi.drawnSettai(this.userName); - } else { - text = serifs.reversi.drawn(this.userName); - } - } - - await this.post(text, this.startedNote); - - process.exit(); - } - - /** - * ๆ‰“ใŸใ‚ŒใŸใจใ - */ - private onSet = (msg: any) => { - this.o.put(msg.color, msg.pos); - this.currentTurn++; - - if (msg.next === this.botColor) { - this.think(); - } - } - - /** - * Botใซใจใฃใฆใ‚ใ‚‹ๅฑ€้ขใŒใฉใ‚Œใ ใ‘ๆœ‰ๅˆฉใ‹้™็š„ใซ่ฉ•ไพกใ™ใ‚‹ - * static(้™็š„)ใจใ„ใ†ใฎใฏใ€ๅ…ˆ่ชญใฟใฏใ›ใšใซ็›ค้ขใฎ็Šถๆ…‹ใฎใฟใง่ฉ•ไพกใ™ใ‚‹ใจใ„ใ†ใ“ใจใ€‚ - * TODO: ๆŽฅๅพ…ๆ™‚ใฏใพใ‚‹ใฃใจๅ‡ฆ็†ใฎไธญ่บซใ‚’ๅค‰ใˆใ€ใจใซใ‹ใ็›ธๆ‰‹ใŒ้š…ใ‚’ๅ–ใฃใฆใ„ใ‚‹ใ“ใจๅ„ชๅ…ˆใช่ฉ•ไพกใซใ™ใ‚‹ - */ - private staticEval = () => { - let score = this.o.canPutSomewhere(this.botColor).length; - - for (const index of this.sumiIndexes) { - const stone = this.o.board[index]; - - if (stone === this.botColor) { - score += 1000; // ่‡ชๅˆ†ใŒ้š…ใ‚’ๅ–ใฃใฆใ„ใŸใ‚‰ใ‚นใ‚ณใ‚ขใƒ—ใƒฉใ‚น - } else if (stone !== null) { - score -= 1000; // ็›ธๆ‰‹ใŒ้š…ใ‚’ๅ–ใฃใฆใ„ใŸใ‚‰ใ‚นใ‚ณใ‚ขใƒžใ‚คใƒŠใ‚น - } - } - - // TODO: ใ“ใ“ใซ (้š…ไปฅๅค–ใฎ็ขบๅฎš็Ÿณใฎๆ•ฐ * 100) ใ‚’ใ‚นใ‚ณใ‚ขใซๅŠ ็ฎ—ใ™ใ‚‹ๅ‡ฆ็†ใ‚’ๅ…ฅใ‚Œใ‚‹ - - for (const index of this.sumiNearIndexes) { - const stone = this.o.board[index]; - - if (stone === this.botColor) { - score -= 10; // ่‡ชๅˆ†ใŒ้š…ใฎๅ‘จ่พบใ‚’ๅ–ใฃใฆใ„ใŸใ‚‰ใ‚นใ‚ณใ‚ขใƒžใ‚คใƒŠใ‚น(ๅฑ้™บใชใฎใง) - } else if (stone !== null) { - score += 10; // ็›ธๆ‰‹ใŒ้š…ใฎๅ‘จ่พบใ‚’ๅ–ใฃใฆใ„ใŸใ‚‰ใ‚นใ‚ณใ‚ขใƒ—ใƒฉใ‚น - } - } - - // ใƒญใ‚ปใ‚ชใชใ‚‰ใ‚นใ‚ณใ‚ขใ‚’ๅ่ปข - if (this.game.isLlotheo) score = -score; - - // ๆŽฅๅพ…ใชใ‚‰ใ‚นใ‚ณใ‚ขใ‚’ๅ่ปข - if (this.isSettai) score = -score; - - return score; - } - - private think = () => { - console.log(`(${this.currentTurn}/${this.maxTurn}) Thinking...`); - console.time('think'); - - // ๆŽฅๅพ…ใƒขใƒผใƒ‰ใฎใจใใฏใ€ๅ…จๅŠ›(5ๆ‰‹ๅ…ˆ่ชญใฟใใ‚‰ใ„)ใง่ฒ ใ‘ใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ - // TODO: ๆŽฅๅพ…ใฎใจใใฏใ€ใฉใกใ‚‰ใ‹ใจใ„ใ†ใจใ€Œ่‡ชๅˆ†ใŒไธๅˆฉใซใชใ‚‹ๆ‰‹ใ‚’้ธใถใ€ใจใ„ใ†ใ‚ˆใ‚Šใฏใ€ใ€Œ็›ธๆ‰‹ใซ่ง’ใ‚’ๅ–ใ‚‰ใ›ใ‚‰ใ‚Œใ‚‹ๆ‰‹ใ‚’้ธใถใ€ใ‚ˆใ†ใซๆ€่€ƒใ™ใ‚‹ - // ่‡ชๅˆ†ใŒไธๅˆฉใซใชใ‚‹ๆ‰‹ใ‚’้ธใถใจใ„ใ†ใฎใฏใ€ๆ›่จ€ใ™ใ‚Œใฐ่‡ชๅˆ†ใŒๆ‰“ใฆใ‚‹็ฎ‡ๆ‰€ใ‚’ๆธ›ใ‚‰ใ™ใ“ใจใซใชใ‚‹ใฎใงใ€ - // ่‡ชๅˆ†ใŒๆ‰“ใฆใ‚‹็ฎ‡ๆ‰€ใŒๅฐ‘ใชใ„ใจ็ตๆžœ็š„ใซๆ€่€ƒใฎ้ธๆŠž่‚ขใŒ็‹ญใพใ‚Šใ€ๅฏพๅฑ€ใ‚’ใ‚ณใƒณใƒˆใƒญใƒผใƒซใ™ใ‚‹ใฎใŒ้›ฃใ—ใใชใ‚‹ใ‚ธใƒฌใƒณใƒžใฎใ‚ˆใ†ใชใ‚‚ใฎใŒใ‚ใ‚‹ใ€‚ - // ใคใพใ‚Šใ€Œ็›ธๆ‰‹ใ‚’ๅ‹ใŸใ›ใ‚‹ใ€ใจใ„ใ†ๆ„ๅ‘ณใงใฎๆญฃใ—ใ„ๆŽฅๅพ…ใฏใ€ใ€Œใ‚ฒใƒผใƒ ๅบ็›คใƒปไธญ็›คใพใงใฏ(้€šๅธธ้€šใ‚Š)่‡ชๅˆ†ใฎๆœ‰ๅˆฉใซใชใ‚‹ๆ‰‹ใ‚’ๆ‰“ใกใ€็ต‚็›คใซใชใฃใฆใ‹ใ‚‰็›ธๆ‰‹ใŒๅ‹ใคใ‚ˆใ†ใซๆ‰“ใคใ€ใ“ใจใ€‚ - // ใจใฏใ„ใˆ่—ใซๆฑ‚ใ‚ใ‚‰ใ‚Œใฆใ„ใ‚‹ใฎใฏใ€ใใ†ใ„ใฃใŸใ€Œๆœฌ็‰ฉใฎใ€ๆŽฅๅพ…ใงใฏใชใใ€ๅ˜ใซใ€Œ่ง’ใ‚’ๅ–ใ‚‰ใ›ใฆใใ‚Œใ‚‹ใ€ๆŽฅๅพ…ใ ใจๆ€ใ‚ใ‚Œใ‚‹ใฎใงใ€ - // ้™็š„่ฉ•ไพกใงใ€Œ่ง’ใซ็›ธๆ‰‹ใฎ็ŸณใŒใ‚ใ‚‹ใ‹ใฉใ†ใ‹(ใจใ€ใ‚ฒใƒผใƒ ใŒ็ต‚ใ‚ใฃใŸใจใใฏ็›ธๆ‰‹ใŒๅ‹ใฃใฆใ„ใ‚‹ใ‹ใฉใ†ใ‹)ใ€ใ‚’่€ƒๆ…ฎใ™ใ‚‹ใ‚ˆใ†ใซใ™ใ‚Œใฐ่‰ฏใ„ใ‹ใ‚‚ใ—ใ‚Œใชใ„ใ€‚ - const maxDepth = this.isSettai ? 5 : this.strength; - - /** - * ฮฑฮฒๆณ•ใงใฎๆŽข็ดข - */ - const dive = (pos: number, alpha = -Infinity, beta = Infinity, depth = 0): number => { - // ่ฉฆใ—ๆ‰“ใก - this.o.put(this.o.turn, pos); - - const isBotTurn = this.o.turn === this.botColor; - - // ๅ‹ใฃใŸ - if (this.o.turn === null) { - const winner = this.o.winner; - - // ๅ‹ใคใ“ใจใซใ‚ˆใ‚‹ๅŸบๆœฌใ‚นใ‚ณใ‚ข - const base = 10000; - - let score; - - if (this.game.isLlotheo) { - // ๅ‹ใกใฏๅ‹ใกใงใ‚‚ใ€ใ‚ˆใ‚Š่‡ชๅˆ†ใฎ็Ÿณใ‚’ๅฐ‘ใชใใ—ใŸๆ–นใŒ็พŽใ—ใ„ๅ‹ใกใ ใจๅˆคๅฎšใ™ใ‚‹ - score = this.o.winner ? base - (this.o.blackCount * 100) : base - (this.o.whiteCount * 100); - } else { - // ๅ‹ใกใฏๅ‹ใกใงใ‚‚ใ€ใ‚ˆใ‚Š็›ธๆ‰‹ใฎ็Ÿณใ‚’ๅฐ‘ใชใใ—ใŸๆ–นใŒ็พŽใ—ใ„ๅ‹ใกใ ใจๅˆคๅฎšใ™ใ‚‹ - score = this.o.winner ? base + (this.o.blackCount * 100) : base + (this.o.whiteCount * 100); - } - - // ๅทปใๆˆปใ— - this.o.undo(); - - // ๆŽฅๅพ…ใชใ‚‰่‡ชๅˆ†ใŒ่ฒ ใ‘ใŸๆ–นใŒ้ซ˜ใ‚นใ‚ณใ‚ข - return this.isSettai - ? winner !== this.botColor ? score : -score - : winner === this.botColor ? score : -score; - } - - if (depth === maxDepth) { - // ้™็š„ใซ่ฉ•ไพก - const score = this.staticEval(); - - // ๅทปใๆˆปใ— - this.o.undo(); - - return score; - } else { - const cans = this.o.canPutSomewhere(this.o.turn); - - let value = isBotTurn ? -Infinity : Infinity; - let a = alpha; - let b = beta; - - // TODO: ๆฎ‹ใ‚Šใ‚ฟใƒผใƒณๆ•ฐใจใ„ใ†ใ‚ˆใ‚Šใ‚‚ใ€Œ็ฉบใ„ใฆใ„ใ‚‹ใƒžใ‚นใŒ12ไปฅไธ‹ใ€ใฎๅ ดๅˆใซๅฎŒๅ…จ่ชญใฟใ•ใ›ใ‚‹ - const nextDepth = (this.strength >= 4) && ((this.maxTurn - this.currentTurn) <= 12) ? Infinity : depth + 1; - - // ๆฌกใฎใ‚ฟใƒผใƒณใฎใƒ—ใƒฌใ‚คใƒคใƒผใซใจใฃใฆๆœ€ใ‚‚่‰ฏใ„ๆ‰‹ใ‚’ๅ–ๅพ— - // TODO: cansใ‚’ใพใšๆต…ใ่ชญใ‚“ใง(ใพใŸใฏไพกๅ€คใƒžใƒƒใƒ—ใ‚’ๅˆฉ็”จใ—ใฆ)ใ‹ใ‚‰ๆœ‰็›Šใใ†ใชๆ‰‹ใ‹ใ‚‰้ †ใซไธฆในๆ›ฟใˆใ€ๅŠน็އใ‚ˆใๆžๅˆˆใ‚Šใงใใ‚‹ใ‚ˆใ†ใซใ™ใ‚‹ - for (const p of cans) { - if (isBotTurn) { - const score = dive(p, a, beta, nextDepth); - value = Math.max(value, score); - a = Math.max(a, value); - if (value >= beta) break; - } else { - const score = dive(p, alpha, b, nextDepth); - value = Math.min(value, score); - b = Math.min(b, value); - if (value <= alpha) break; - } - } - - // ๅทปใๆˆปใ— - this.o.undo(); - - return value; - } - }; - - const cans = this.o.canPutSomewhere(this.botColor); - const scores = cans.map(p => dive(p)); - const pos = cans[scores.indexOf(Math.max(...scores))]; - - console.log('Thinked:', pos); - console.timeEnd('think'); - - setTimeout(() => { - process.send!({ - type: 'put', - pos - }); - }, 500); - } - - /** - * ๅฏพๅฑ€ใŒๅง‹ใพใฃใŸใ“ใจใ‚’MisskeyใซๆŠ•็จฟใ—ใพใ™ - */ - private postGameStarted = async () => { - const text = this.isSettai - ? serifs.reversi.startedSettai(this.userName) - : serifs.reversi.started(this.userName, this.strength.toString()); - - return await this.post(`${text}\nโ†’[่ฆณๆˆฆใ™ใ‚‹](${this.url})`); - } - - /** - * MisskeyใซๆŠ•็จฟใ—ใพใ™ - * @param text ๆŠ•็จฟๅ†…ๅฎน - */ - private post = async (text: string, renote?: any) => { - if (this.allowPost) { - const body = { - i: config.i, - text: text, - visibility: 'home' - } as any; - - if (renote) { - body.renoteId = renote.id; - } - - try { - const res = await request.post(`${config.host}/api/notes/create`, { - json: body - }); - - return res.createdNote; - } catch (e) { - console.error(e); - return null; - } - } else { - return null; - } - } -} - -new Session(); diff --git a/src/modules/reversi/index.ts b/src/modules/reversi/index.ts deleted file mode 100644 index 82b5768..0000000 --- a/src/modules/reversi/index.ts +++ /dev/null @@ -1,180 +0,0 @@ -import * as childProcess from 'child_process'; -import autobind from 'autobind-decorator'; -import Module from '@/module'; -import serifs from '@/serifs'; -import config from '@/config'; -import Message from '@/message'; -import Friend from '@/friend'; -import getDate from '@/utils/get-date'; - -export default class extends Module { - public readonly name = 'reversi'; - - /** - * ใƒชใƒใƒผใ‚ทใ‚นใƒˆใƒชใƒผใƒ  - */ - private reversiConnection?: any; - - @autobind - public install() { - if (!config.reversiEnabled) return {}; - - this.reversiConnection = this.ai.connection.useSharedConnection('gamesReversi'); - - // ๆ‹›ๅพ…ใ•ใ‚ŒใŸใจใ - this.reversiConnection.on('invited', msg => this.onReversiInviteMe(msg.parent)); - - // ใƒžใƒƒใƒใ—ใŸใจใ - this.reversiConnection.on('matched', msg => this.onReversiGameStart(msg)); - - if (config.reversiEnabled) { - const mainStream = this.ai.connection.useSharedConnection('main'); - mainStream.on('pageEvent', msg => { - if (msg.event === 'inviteReversi') { - this.ai.api('games/reversi/match', { - userId: msg.user.id - }); - } - }); - } - - return { - mentionHook: this.mentionHook - }; - } - - @autobind - private async mentionHook(msg: Message) { - if (msg.includes(['ใƒชใƒใƒผใ‚ท', 'ใ‚ชใ‚ปใƒญ', 'reversi', 'othello'])) { - if (config.reversiEnabled) { - msg.reply(serifs.reversi.ok); - - this.ai.api('games/reversi/match', { - userId: msg.userId - }); - } else { - msg.reply(serifs.reversi.decline); - } - - return true; - } else { - return false; - } - } - - @autobind - private async onReversiInviteMe(inviter: any) { - this.log(`Someone invited me: @${inviter.username}`); - - if (config.reversiEnabled) { - // ๆ‰ฟ่ช - const game = await this.ai.api('games/reversi/match', { - userId: inviter.id - }); - - this.onReversiGameStart(game); - } else { - // todo (ใƒชใƒใƒผใ‚ทใงใใชใ„ๆ—จใ‚’ใƒกใƒƒใ‚ปใƒผใ‚ธใงไผใˆใ‚‹ใชใฉ) - } - } - - @autobind - private onReversiGameStart(game: any) { - this.log('enter reversi game room'); - - // ใ‚ฒใƒผใƒ ใ‚นใƒˆใƒชใƒผใƒ ใซๆŽฅ็ถš - const gw = this.ai.connection.connectToChannel('gamesReversiGame', { - gameId: game.id - }); - - // ใƒ•ใ‚ฉใƒผใƒ  - const form = [{ - id: 'publish', - type: 'switch', - label: '่—ใŒๅฏพๅฑ€ๆƒ…ๅ ฑใ‚’ๆŠ•็จฟใ™ใ‚‹ใฎใ‚’่จฑๅฏ', - value: true - }, { - id: 'strength', - type: 'radio', - label: 'ๅผทใ•', - value: 3, - items: [{ - label: 'ๆŽฅๅพ…', - value: 0 - }, { - label: 'ๅผฑ', - value: 2 - }, { - label: 'ไธญ', - value: 3 - }, { - label: 'ๅผท', - value: 4 - }, { - label: 'ๆœ€ๅผท', - value: 5 - }] - }]; - - //#region ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใƒ—ใƒญใ‚ปใ‚น้–‹ๅง‹ - const ai = childProcess.fork(__dirname + '/back.js'); - - // ใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใƒ—ใƒญใ‚ปใ‚นใซๆƒ…ๅ ฑใ‚’ๆธกใ™ - ai.send({ - type: '_init_', - body: { - game: game, - form: form, - account: this.ai.account - } - }); - - ai.on('message', (msg: Record) => { - if (msg.type == 'put') { - gw.send('set', { - pos: msg.pos - }); - } else if (msg.type == 'ended') { - gw.dispose(); - - this.onGameEnded(game); - } - }); - - // ใ‚ฒใƒผใƒ ใ‚นใƒˆใƒชใƒผใƒ ใ‹ใ‚‰ๆƒ…ๅ ฑใŒๆตใ‚ŒใฆใใŸใ‚‰ใใฎใพใพใƒใƒƒใ‚ฏใ‚จใƒณใƒ‰ใƒ—ใƒญใ‚ปใ‚นใซไผใˆใ‚‹ - gw.addListener('*', message => { - ai.send(message); - }); - //#endregion - - // ใƒ•ใ‚ฉใƒผใƒ ๅˆๆœŸๅŒ– - setTimeout(() => { - gw.send('initForm', form); - }, 1000); - - // ใฉใ‚“ใช่จญๅฎšๅ†…ๅฎนใฎๅฏพๅฑ€ใงใ‚‚ๅ—ใ‘ๅ…ฅใ‚Œใ‚‹ - setTimeout(() => { - gw.send('accept', {}); - }, 2000); - } - - @autobind - private onGameEnded(game: any) { - const user = game.user1Id == this.ai.account.id ? game.user2 : game.user1; - - //#region 1ๆ—ฅใซ1ๅ›žใ ใ‘่ฆชๆ„›ๅบฆใ‚’ไธŠใ’ใ‚‹ - const today = getDate(); - - const friend = new Friend(this.ai, { user: user }); - - const data = friend.getPerModulesData(this); - - if (data.lastPlayedAt != today) { - data.lastPlayedAt = today; - friend.setPerModulesData(this, data); - - friend.incLove(); - } - //#endregion - } -} diff --git a/src/modules/welcome/index.ts b/src/modules/welcome/index.ts deleted file mode 100644 index 33bad7c..0000000 --- a/src/modules/welcome/index.ts +++ /dev/null @@ -1,33 +0,0 @@ -import autobind from 'autobind-decorator'; -import Module from '@/module'; - -export default class extends Module { - public readonly name = 'welcome'; - - @autobind - public install() { - const tl = this.ai.connection.useSharedConnection('localTimeline'); - - tl.on('note', this.onLocalNote); - - return {}; - } - - @autobind - private onLocalNote(note: any) { - if (note.isFirstNote) { - setTimeout(() => { - this.ai.api('notes/create', { - renoteId: note.id - }); - }, 3000); - - setTimeout(() => { - this.ai.api('notes/reactions/create', { - noteId: note.id, - reaction: 'congrats' - }); - }, 5000); - } - } -} diff --git a/src/utils/includes.ts b/src/utils/includes.ts deleted file mode 100644 index 4213f5d..0000000 --- a/src/utils/includes.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { katakanaToHiragana, hankakuToZenkaku } from './japanese'; - -export default function(text: string, words: string[]): boolean { - if (text == null) return false; - - text = katakanaToHiragana(hankakuToZenkaku(text)).toLowerCase(); - words = words.map(word => katakanaToHiragana(word).toLowerCase()); - - return words.some(word => text.includes(word)); -} diff --git a/test/__mocks__/account.ts b/test/__mocks__/account.ts deleted file mode 100644 index 3d53135..0000000 --- a/test/__mocks__/account.ts +++ /dev/null @@ -1,7 +0,0 @@ -export const account = { - id: '0', - name: '่—', - username: 'ai', - host: null, - isBot: true, -}; diff --git a/test/__mocks__/misskey.ts b/test/__mocks__/misskey.ts deleted file mode 100644 index de1212f..0000000 --- a/test/__mocks__/misskey.ts +++ /dev/null @@ -1,67 +0,0 @@ -import * as http from 'http'; -import * as Koa from 'koa'; -import * as websocket from 'websocket'; - -export class Misskey { - private server: http.Server; - private streaming: websocket.connection; - - constructor() { - const app = new Koa(); - - this.server = http.createServer(app.callback()); - - const ws = new websocket.server({ - httpServer: this.server - }); - - ws.on('request', async (request) => { - const q = request.resourceURL.query as ParsedUrlQuery; - - this.streaming = request.accept(); - }); - - this.server.listen(3000); - } - - public waitForStreamingMessage(handler) { - return new Promise((resolve, reject) => { - const onMessage = (data: websocket.IMessage) => { - if (data.utf8Data == null) return; - const message = JSON.parse(data.utf8Data); - const result = handler(message); - if (result) { - this.streaming.off('message', onMessage); - resolve(); - } - }; - this.streaming.on('message', onMessage); - }); - } - - public async waitForMainChannelConnected() { - await this.waitForStreamingMessage(message => { - const { type, body } = message; - if (type === 'connect') { - const { channel, id, params, pong } = body; - - if (channel !== 'main') return; - - if (pong) { - this.sendStreamingMessage('connected', { - id: id - }); - } - - return true; - } - }); - } - - public sendStreamingMessage(type: string, payload: any) { - this.streaming.send(JSON.stringify({ - type: type, - body: payload - })); - } -} diff --git a/test/__mocks__/ws.ts b/test/__mocks__/ws.ts deleted file mode 100644 index 5b31e2c..0000000 --- a/test/__mocks__/ws.ts +++ /dev/null @@ -1,17 +0,0 @@ -import * as websocket from 'websocket'; - -export class StreamingApi { - private ws: WS; - - constructor() { - this.ws = new WS('ws://localhost/streaming'); - } - - public async waitForMainChannelConnected() { - await expect(this.ws).toReceiveMessage("hello"); - } - - public send(message) { - this.ws.send(JSON.stringify(message)); - } -} diff --git a/test/__modules__/test.ts b/test/__modules__/test.ts deleted file mode 100644 index 56ef18e..0000000 --- a/test/__modules__/test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import autobind from 'autobind-decorator'; -import Module from '@/module'; -import Message from '@/message'; - -export default class extends Module { - public readonly name = 'test'; - - @autobind - public install() { - return { - mentionHook: this.mentionHook - }; - } - - @autobind - private async mentionHook(msg: Message) { - if (msg.text && msg.text.includes('ping')) { - msg.reply('PONG!', { - immediate: true - }); - return true; - } else { - return false; - } - } -} diff --git a/test/core.ts b/test/core.ts deleted file mode 100644 index 721c4f3..0000000 --- a/test/core.ts +++ /dev/null @@ -1,20 +0,0 @@ -import ่— from '@/ai'; -import { account } from '#/__mocks__/account'; -import TestModule from '#/__modules__/test'; -import { StreamingApi } from '#/__mocks__/ws'; - -process.env.NODE_ENV = 'test'; - -let ai: ่—; - -beforeEach(() => { - ai = new ่—(account, [ - new TestModule(), - ]); -}); - -test('mention hook', async () => { - const streaming = new StreamingApi(); - - -}); diff --git a/test/tsconfig.json b/test/tsconfig.json deleted file mode 100644 index 87add8f..0000000 --- a/test/tsconfig.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "baseUrl": ".", - "rootDir": "../", - "paths": { - "@/*": ["../src/*"], - "#/*": ["./*"] - }, - }, - "compileOnSave": false, - "include": [ - "**/*.ts" - ] -}