Files
Qlyra/lib/frontend/commands/watching_command.dart
T

391 lines
14 KiB
Dart

import 'dart:async';
import 'dart:convert';
import 'slash_command.dart';
const Duration _frameDelay = Duration(milliseconds: 100);
const Duration _holdBeforeText = Duration(seconds: 1);
const String _endText = 'I Always Watching You';
const String _art = r'''
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$@bd$$$$$$$$$$M&B$$$$$$$$$$$$$$
$$$$$$$%kdOW$$$$;$t$$$$$kqda$$$$$$$$$$$$
$$$$$$WwmYX@$$$$$$$$$$$$kCCO*%$$$$$$$$$$
$$$$$WwJQYXd$$$$$$$$$$$$q0LOqaM&@$@$$$$$
$$$$BhamCXUUZ$$$$$$$$$$w0QQOqa%W8&&$$$$$
$$$$$@#dpOUYzX0&$$$$BdO00waoM8@$$$$$$$$$
$$$$$$$@W*bmwwmmZpqbwpb*&B$$$$$$$$$$$$$$
$$$$$$$$$$$$$$8&%$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$W$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$%B%$$$$$$$$$$$$$$$
$$$$$$$$$WaQq$$$$$$$$$@aoMB$$$$$$$$$$$$$
$$$$$$$kq0Uo$$$$'$l$$B$$OLQh8@$$$$$$$$$$
$$$$$BkQUuc@$$$$$$$$$$$$wCJmaM$$$$$$$$$$
$$$$&o0XYzc*$$$$$$$$$$$$OOQOpaW&8$8$$$$$
$$$$%hhmCYJXq$$$$$$$$$@m0QQOq*B*8#M@$$$$
$$$$$B*pqQYUzXZ8$$$$&dO00Zboo&B$$$$$$$$$
$$$$$$$@W*pwwmZZOpqbubkoW8@$$$$$$$$$$$$$
$$$$$$$$$$$$$$%&%$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$&*oa@$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$u$$$$&ZczLm*%$$$$$$$$$$$$$
$$$$$$$o$$$$$$$$$$$&OuruXJOk&$$$$$$$$$$$
$$$$$$h0q$$$$$$$$$$pCunnvzJwbhW$$$$$$$$$
$$$$$8wJz0@$$$$$$&Ocrxxxuz0wdk&8%&$$$$$$
$$$$$#dZJzuzwoawJznfjjxvU0mdo&B8WW@$$$$$
$$$$$$BommYccvurrjrnvzQmpkM8B$$$$$$$$$$$
$$$$$$$$$@W*abppZwbaWW&B$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$@$X$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$hCJXx0wW$$$$$$$$$$$$$$$
$$$$$$$$$$$$$%$$$Bc{[[1fuOhB$$$$$$$$$$$$
$$$$$$$@$$$$$$$$$$x|(/nnzJJzOo$$$$$$$$$$
$$$$$$dp$$$$$$$$$q(1|txucJ0QOqW8$$$$$$$$
$$$$@8qJM$$$$$$@zj/|(|jnz0Zwbo#8$&$$$$$$
$$$$$WdmUvqWWpYutt(|rvvvJmph8%@$(8@$$$$$
$$$$$$BomwJvcrrfrnxxvvLOdaM%@$$$$$$$$$$$
$$$$$$$$$@WahpqpwpwaMW&B$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$B@Q0$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$wLXvvqpB$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$b/}[[(jnZMB$$$$$$$$$$$$
$$$$$$8$$$$$$$$$$hf(1fnvJYUzq8$$$$$$$$$$
$$$$$@ZM$$$$$$$$$J|{/rrnXQCQOhh$$$$$$$$$
$$$$88OC@$$$$$$@zjtt(tuvL0ZqboM@8M$$$$$$
$$$$$#pZYJ#%&pYnf||jnvuzCwd*8@@8UB@$$$$$
$$$$$$%aqOYzvrjrjrvuzX0qbaWB@$$$$$$$$$$$
$$$$$$$$$B&Wopppqwd#MWB@$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$hZYnrJZkB$$$$$$$$$$$$$$$
$$$$$$$$$$$$$@$$oj{-_?(xYh#$$$$$$$$$$$$$
$$$$$$$$$$$$$$$@8f{[1|nvzzzJhB$$$$$$$$$$
$$$$$$d$$$$$$$$$mjj1fxruUJJCmh*$$$$$$$$$
$$$$8&wd$$$$$$$krt|)(jvXQQwqkWM$Bq$$$$$$
$$$$$#pZQa$$$wUnt|trnuuU0pkM%@@Bk%$$$$$$
$$$$$$BopOYUcnrxxuvXXYQwh#&B$$$$$$$$$$$$
$$$$$$$$$B&&*hpddp0MW&%@$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$Moo&k@B$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$dYrj|Xwh%$$$$$$$$$$$$$$$
$$$$$$$$$$$$%$$@0l'~~[}nQd#@$$$$$$$$$$$$
$$$$$$$$$$$$$$$$w/11(ruzzXvCb@$$$$$$$$$$
$$$$$&k$$$$$$$$$U/|1jfuXJCQ0w&M$$$$$$$$$
$$$$&WZ*$$$$$$BYjjf/fxcQ0Owp##%$Qp$$$$$$
$$$$$MpOCdB&oJujtfrxnucCwdo&@$$%&@$$$$$$
$$$$$$B*qqJzzuuvuXXJQZdbo8%$$$$$$$$$$$$$
$$$$$$$$$$B8&*#M&M8%B@$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$##MkkB%$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$hJXv(rZq&$$$$$$$$$$$$$$$
$$$$$$$$$$$$$*@Wof<>_?{/zw*8$$$$$$$$$$$$
$$$$$$@$$$$$$$$$8x{1)juczXcJq&$$$$$$$$$$
$$$$$@p$$$$$$$$$Zt||tnnzUUCQq*h$$$$$$$$$
$$$$%MqZ$$$$$$$wxjf1|fcU0Omq*#W$hx$$$$$$
$$$$$WbwJqB@#OvrftfxuucU0daW@@$8&@$$$$$$
$$$$$$@#ppLYcuvcvzXUCOpkoW8@$$$$$$$$$$$$
$$$$$$$$$$@8W#**#%W88B$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$8**Qao8$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$WYrn|uYQo$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$t0r|)1ruXUYLa$$$$$$$$$$$$
$$$$$$%$$$$$$$$$n{[1{|jzYXJLpW$$$$$$$$$$
$$$$$@O8$$$$$$8u{[{[}/nUCCZZbh#$$$$$$$$$
$$$$8oZUZ8$B*v/[}]{1f/nvLmw#BBB$ut$$$$$$
$$$$$&hwYvunf((()ttjnxvzUmbM%@&W$$$$$$$$
$$$$$$$WbwOXzXvvuvzJQmqk*&%$$$$$$$$$$$$$
$$$$$$$$$$@$8MW&%&%B@$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$*kkwqk@$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$wx|)(nuJh%$$$$$$$$$$$$$$
$$$$$$$$$$$$$@B(^(1(jrvYXYQ*$$$$$$$$$$$$
$$$$$W$$$$$$$$$Ott[}(|rzJUQZob$$$$$$$$$$
$$$$$OC$$$$$$Mv]]{}}{fuCQmqdhM$$$$$$$$$$
$$$BWpCvJkaLx([[[[}1jzUJ0mpM%%$th8$$$$$$
$$$$B*dJvunt){11)t//xnucCwa8@$&MB$$$$$$$
$$$$$$%awqYvJUvvvvULmmh*&%@$$$$$$$$$$$$$
$$$$$$$$$$B8&W&8&BWB$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$MW@$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$BhZwpW$$$$$$$$$$$$$$$
$$$$$$$%M@$$$$$$$$$$aLcvcUw&$$$$$$$$$$$$
$$$$$$dCp$$$$$$$$$$$*0vzYwOpb#$$$$$$$$$$
$$$$$WJXOB$$$$$$$$$$pLYXXJOmpk*&$$$$$$$$
$$$$#kQzJ0&$$$$$$$%QvuvvcU0wda#@$%$$$$$$
$$$$BobOUccYOo*o0UuxnnvcY0qk#%$$$X8$$$$$$
$$$$$@8hpQUzczcvnuuvzU0wk#%B$$$$$$$$$$$$
$$$$$$$$$B&M*hdqwqa#M8B$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$hm@$$$$$$$$$$MB$$$$$$$$$$$$$$$
$$$$$$$%pYX@$$$$$$$$$$$@wmwo$$$$$$$$$$$$
$$$$$$pcxrc$$$$$$$$$$$$$ZCLda%$$$$$$$$$$
$$$$$*Jvuuna$$$$$$$$$$$kqOJZd*8B$$$$$$$$
$$$@opZCJcYuC@$$$$$$$B0JLLJLwo8W&$$$$$$$
$$$$BabUcYvvnncCkkd0CvvzzCLq#%BB$8$$$$$$
$$$$$$8aw0UzcczYccvvzU0qk#%B$$$$$$$$$$$$
$$$$$$$$$%&#obdqqZboW&@$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$%$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$#ZqqB$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$#mcv(na$$$$$$$$$$$$MB$$$$$$$$$$$$
$$$$$@Zzf}1{u&$$$B$$$$$$$$Wko@$$$$$$$$$$
$$$$@wXnrjjfnB$$$$$$$$$$$$ohoWB$$$$$$$$$
$$$@WZQQJcuxuUM$$$$$$$$$@kqpaM8W]$$$$$$$
$$$$%haQXuvUvuncw@$$$$8bmZZb#%8%b#$$$$$$
$$$$$@WdpOYYzczzUUJLLZmphW%@$$$$$$$$$$$$
$$$$$$$$$8&*abpqZbk*#8@$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$@M&pwkmpdB$$$$$$$$$$$$$$$$$$
$$$$$$$$8dZqLJnY{uq$$$$$$$$$$$$$$$$$$$$$
$$$$$$8pX//[]?++]p`$@$$$|$$$$$$$$$$$$$$$
$$$$$%hJYf(}__-]U$$$$$$$$$$$$$$$$$$$$$$$
$$$$hZYXcnnrrrjjC$$$$$$$$$$$$$$$$@$@$$$$
$$$$8hbmZmOYXcuvXp@$$$$$$$$$$$$$$m8$$$$$
$$$$$$WkbmJccLJUUUQo$$$$$$$&8@$$$$$$$$$$
$$$$$$$$%MoqbkbrOwdqdkoMWB$$$$$$$$$$$$$$
$$$$$$$$$$$$$$@B$$$$$$$$$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$Bq*YqmCqb&$$$$$$$$$$$$$$$$
$$$$$$$$$%baQXJuOvzJJpY$$$@$$$$$$$$$$$$$
$$$$$$$88kZXY/t)|j/nh$$$$$$$$$$$$$$$$$$$
$$$$$@@kZwCvuj/1)|/C$$$$$$$$$$$$$$$$$$$$
$$$$$@&#dZqLUYYXzvcZ$$$$$$$$$$$$$$$B@$$$$
$$$$$$@WhMkqq0QCLCQZbB$$$$$$$$$$$$$$$$$$
$$$$$$$$$%MkwppqZwwqpko$$$@%8B@$$$$$$$$$$
$$$$$$$$$$$$$$B%8W8&&%B@$$$hmhoZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$<&Wp8$$$$$$$$$$$$$$$$$$
$$$$$$$$$$akqCZmbY0d%$$$$$$$$$$$$$$$$$$$
$$$$$$$$*oqYJjxfxYp$$$$$$$$$$$$$$$$$$$$$
$$$$$$$hwwCzvj/jfq$$$$$$$$$$$$$$$$$$$$$$
$$$$$$8&dpOLLUzuXk$$$$$$$$$$$$$$$$$B$$$$
$$$$$$$&oopww0LJCmW$$$$$$$$$$$%@$$$$$$$$
$$$$$$$$$BMaqpdwmpqa$$$$$$W&B@$$$$$$$$$$
$$$$$$$$$$$$$$$%8a&&M&8%@$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$%kqO."0CucOZkW$$$$$$$$$$$$$$
$$$$$$$$BabJL(zjC({Xx/8@$$$$$$$$$$$$$$$$
$$$$$$$**qCfr1{{}?[{C$$$$$$$$$$$$$$$$$$$
$$$$$@$bJ0vnxf[][}}O$$$$$$$$$$$$$$$@$$$$
$$$$$@M*pZwJUvzuvnn&$$$$$$$$$$$$$$$@$$$$
$$$$$$@WaooqkOQQCUUZ@$$$$$$$$$$@$$$$$$$$
$$$$$$$$$BWawbqqqwmwp#$$$$@&B$$$$$$$$$$$
$$$$$$$$$$$$$$@88#8B&W&@$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$%Wb$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$@#wQtnW$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$p0r}({tB$$$$$$$$$$$$kdB$$$$$$$$$
$$$$$$$hXn(()||Z$$$$$$$$$$$%kdh8$$$$$$$$
$$$$$@oLJXcujfrrQ$$$$$$$$@dOOwqo&&$$$$$$
$$$$$&#qO0nrfrjj(jxQoWWb0UzcULda*k8#B$$$
$$$$$$@*bqYvxvjrrrrvnnrnvzJwhM88@@@$$$$$
$$$$$$$$@8#bdbqqO0Lpdkh*8B$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$@$$$@$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$WwB@$$$$$$$$$$$$$$$$$
$$$$$$$$$$&*oqwZbwZ00M$$$$$$$$$$$$$$$$$$
$$$$$$$%ao*dqQcXYOvd$$$$$$$$$$$$$$$$$$$$
$$$$$$%$Mhow0CUYzUC$$$$$$$$$$$$$$$$$$$$$
$$$$$$$%###kdbwm0QL@$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$@&kqkbqpwdbB$$$$$$BB@$$$$$$$$$$
$$$$$$$$$$$$$@B%###&MW&M8B@hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$8*&WaB$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$BQnv/vZZ&@$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$@Bpl`+]}/z0h&$$$$$$$$$$$
$$$$$$$B$$$$$$$$$$kx11(fuzzYCq&$$$$$$$$$
$$$$$$$wk$$$$$$$$%buftfuuzJJ0OaoB$$$$$$$
$$$$$@aq0$$$$$$$$dzrf/fncCQ0wpo&@#O@$$$$
$$$$$$&ddLp$$$$oCujfrnuuvJZqoM%$&Q&@$$$$
$$$$$$$@#dqJUJzvunnvcXCOdh#WB@$$$$$$$$$$
$$$$$$$$$$@%W#okkbdk*#8@$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$@pUcuQwa@$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$8r/{{xUmkM$$$$$$$$$$$$
$$$$$$$@B$$$$$$$$$$Ct|1/rcJ0ma@$$$$$$$$$
$$$$$$$bm$$$$$$$$$$Lr/jnuXJCQZa88$$$$$$$
$$$$$@&bLB$$$$$$$$#znrjnXYUQZph*8$a8$$$$
$$$$$$8bdCa$$$$$$qvuucnncJ0dh*@$@YMB$$$$
$$$$$$$@MdwLOOQLzuuuvcJ0ma*W8B$@$$$$$$$$
$$$$$$$$$$@&W#akdddh#W&B%$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$Bo0awdd@$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$hvztzQd*%$$$$$$$$$$$$$
$$$$$$$BB$$$$$b$@$$J/t{/uzZoW@$$$$$$$$$$
$$$$$$$ma$$$$$$$$$$dxrruJCLQ0qM$$$$$$$$$
$$$$$@@Ow$$$$$$$$$$wcvuXYJ0ZZpo*B$@$$$$$
$$$$$$#amZ$$$$$$$$wJYXzzULZkko$$$J#B$$$$
$$$$$$$8kpOp%$$8qOUXzUJ0wh#W&B@@$$$$$$$$
$$$$$$$$$$Wohqpdw0ZdkboW8@$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$@*YpJhwa%$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$*rz//zJW8$$$$$$$$$$$$$
$$$$$$$M@$$$$$$$$$$0f/|xuuqba8$$$$$$$$$$
$$$$$$$Q#$$$$$$$$$$knrrcYJ00ZwM@$$$$$$$$
$$$$$88OO$$$$$$$$$@QvvczUCQZwd#*B$%$$$$$
$$$$$$#bw0$$$$$$$@OXzXvcYLmha#$$$q%$$$$$
$$$$$$$8od00o#Wk0JzXXXCmk*MW8B$$$$$$$$$$
$$$$$$$$$$8#*kqpwmdbka#88@$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$@%pohqbo&$$$$$$$$$$$$$$$$
$$$$$$$$$$$apz0Q$$$$$$@wwpo$$$$$$$$$$$$$
$$$$$$$$Mpzrtj$$$$$$$$$$@QQ0q&$$$$$$$$$$
$$$$$$$WXu|//$$$$$@$$$$@$BCULOh@$$$$$$$$
$$$$$$BOcxnju$$$$$$$$$$$$@0JLwa#%B$$$$$$
$$$$$&bp0QXnz#$$$$$$$$$$$dZZ0wbk*&%@$$$$
$$$$$$8kp0YUYz0$$$$$$$$@bZOmwq*&%@@@$$$$
$$$$$$$$WamqQUXzCw*WWhqqqkoM&%$$$$$$$$$$
$$$$$$$$$$$B8W#oobdo#M&%@$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$pkwaC0mXzZwk@$$$$$$$$$$$$$$
$$$$$$$$$$oLL/un%$$$$$8UzOw#@$$$$$$$$$$$
$$$$$$$$wOf{1(@$$$$$$$$$@JJcLd$$$$$$$$$$
$$$$$$$bn/1)($$$$$$$$$$@$@UzU0mW@$$$$$$$
$$$$$B%Qcnufx$$$$$$$$$$$$@0JCZbM%&$$$$$$
$$$$$%hpOQYvva$$$$$$$$$$$km0Qmdko&%&@$$$
$$$$$$@apZYUYzL@$$$$$$$@bOOmZwo&%@@@$$$$
$$$$$$$$8omp0JUXJwM8&apqphoW&%@$$$$$$$$$
$$$$$$$$$$$@%&###kk#MW8B$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$hdwaLmmXUQqp%$$$$$$$$$$$$$$
$$$$$$$$$$#Q0tut#$$$$$@Jc0Z*B$$$$$$$$$$$
$$$$$$$$pOt{{}a$$$$$$$$$$UUzYZB$$$$$$$$$
$$$$$$$#c/111B$$$$$%$$$$$$QzUQZ*@$$$$$$$
$$$$$@&Qzunfr$$$$$$$$$$$$$wJC0bM&W$$$$$$
$$$$$BadZ0zvup$$$$$$$$$$$8mO0mbh*MW%W$$$
$$$$$$@*qmYJUzU@$$$$$$$$*mOOZwo8%@@%$$$$
$$$$$$$$8ompLCUXUmW%%#dqqka*&%@$$$$$$$$$
$$$$$$$$$$@@%&##*kko*W88@$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$&h*qqh0qpW*$$$$$$$$$$$$$$$
$$$$$$$$$$@aZvntL%$$$$#Jc0pW$$$$$$$$$$$$
$$$$$$$$@wz1(}z$$$$$$$$$@UJYUb@$$$$$$$$$
$$$$$$$$Un{11O$$$$+$k$$$$@0vzCp#@$$$$$$$
$$$$$$&pcnrfj8$$$$$$$$$$$$dLLCba&%@$$$$$
$$$$$@#bOCUzvZ$$$$$$$$$$$$p0QZd**WW$%$$$
$$$$$$@*pmCUQXC@$$$$$$$$@qZOZwkW%B@BB$$$
$$$$$$$$%amdLCYzJd$$$$#qwwdo*&B$$$$$$$$$
$$$$$$$$$$$@&MokqOzh*o#&B@$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$qbad#M@$$$$$$$$$$$$$$$$
$$$$$$$$$$$kOnUrqa@$@#CJwq#@$$$$$$$$$$$$
$$$$$$$$@pvjx[O$$$$$$$$$kUCUqW$$$$$$$$$$
$$$$$$$@Ux({1B$$$B`$%$$Z@MYucJo8$$$$$$$$
$$$$$$%wvrf|j$$$$$$$$$$$$$0JJZboWB@$$$$$
$$$$$BodLzYzvB$$$$$$$$$$$%Z00Zqko#1$B$$$
$$$$$$Bohw0YCYo$$$$$$$$$@m0QLZpM%%B8@$$$
$$$$$$$$WkpZJJXYq@$$$$WbwZmh*M%$$$$$$$$$
$$$$$$$$$$$8Wodpq1vbhZ*#WBB$$$$$$$$$$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$$$$$$$$$$@dq$$$$$$$$$$M8@$$$$$$$$$$$$$$
$$$$$$$8ddOW$$$$;$/$$@@$dqdM$$$$$$$$$$$$
$$$$$$&qOJcB$$$$$$$$$$$$kLCO*%$$$$$$$$$$
$$$$@#wJLXzq$$$$$$$$$$$$qOQZwkW&@@$$$$$$
$$$$@ohwQXCJO$$$$$$$$$$qO0OOq*BWB8&$$$$$
$$$$$@Wpd0XUzzZM$$$@@dO00qko#%@$$$$$$$$$
$$$$$$$$%*pwppZqQpqbQpko&B@$$$$$$$$$$$$$
$$$$$$$$$$$$$@BB$$@$$$$$$$$hmhaZ$kmC$$$$
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
''';
List<String> _buildFrames() {
final all = const LineSplitter().convert(_art);
var start = 0;
while (start < all.length && all[start].trim().isEmpty) {
start++;
}
final lines = all.sublist(start);
var width = 0;
for (final line in lines) {
if (line.length > width) width = line.length;
}
final padLine = ''.padRight(width, '\$');
final frames = <String>[];
final buffer = <String>[];
for (final line in lines) {
buffer.add(line.isEmpty ? padLine : line.padRight(width, '\$'));
if (line.contains(r'Z$kmC')) {
frames.add(buffer.join('\n'));
buffer.clear();
}
}
return frames;
}
final List<String> _frames = _buildFrames();
Future<void> runWatching(CommandContext ctx) async {
if (!ctx.isOnline()) {
ctx.notify('Нет соединения');
return;
}
if (_frames.isEmpty) return;
final id = await ctx.postMessage(_frames.first);
if (id.isEmpty) return;
final completed = await playFrames(ctx, id, _frames, _frameDelay);
if (!completed) return;
await Future.delayed(_holdBeforeText);
if (!ctx.isActive()) return;
try {
await ctx.updateMessage(id, _endText);
} catch (_) {
if (ctx.isActive() && !ctx.isOnline()) ctx.notifyAntiFlood();
}
}