From aabfeab70dbce8dab8f2d060c06d28674f948cc0 Mon Sep 17 00:00:00 2001 From: AI Agent Date: Sat, 28 Feb 2026 17:58:51 +0400 Subject: [PATCH] Add Telegram bot integration script and update audit report --- .../page-2026-02-27T08-17-03-261Z.png | Bin 0 -> 48359 bytes telegram-bot.js | 238 ++++++++++++++++++ 2 files changed, 238 insertions(+) create mode 100644 .playwright-mcp/page-2026-02-27T08-17-03-261Z.png create mode 100644 telegram-bot.js diff --git a/.playwright-mcp/page-2026-02-27T08-17-03-261Z.png b/.playwright-mcp/page-2026-02-27T08-17-03-261Z.png new file mode 100644 index 0000000000000000000000000000000000000000..a63111551bd1c2254d23ae9115059076d29013c9 GIT binary patch literal 48359 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�H)u6eOjP1HpvkVHX& z0Hy*a$zT#dAHJ26m)Dub6_$DS>{AfOtyi2FE_x!&VKdk)$e(E zLPA0z5e)ljVY+2tkPxW+1Lc4dUI)`qQ!7}6jS06M00izl^}B{~4_|wVYfI#r(P_W? zL7fejeZOw}S1;Y{0EIC^qH3q(flvf+^Z8N0_!FRR0BM<^=pqvPsO<9sNJ4NUwmBCu zoeNFMv8k~}5&^=$?olU$sX8;rygoQ$P8D@jcW+FLI-A8FQXlLx(`~z`F|h`0>b>^q zGR0@#zSMic9%E_wMHN>fR?+GeA{z=p^R>VSGb)4jqbP>;JeFexQ^%ML(Bs5-r0KKJ!Uz(;EoxfuuxopbxG_J}GQDDhO|EbntEKqXMxkWe zhleS^{K1DnDW5!f5)88cnK>MOgM1MP_Eq&0YV&JjYwa`j^JqettPbbFK)K`p!?AXp zaSCE${`l!rx^4oPxc>h8_s!reA27G;yB<7)$G>j2_S=~dh~QWGS?(HoK%}0DDtVVq z#sEOk7u=#K;yeEcvtw(}k%)httb14H{OjaovuoF0$Hn1u=}1;K7*ga$5V4!^_*4Zg zur`_S{vCYv$L@el*G-Bi=VC7l&xm2tc{L!^iH zsF-1TUJs}iLiX&r;#)$VC)xS#szqr)i|45t{+|)z@Ch(N9N_B6KGx1RH@yHxh*iJ{ zeL@)KnJX;ThrI1tE7Dr_yQ^#J*GXjR3UB1Ee?>%zZVR=4Fy%o( zx>wI6QSLPJ`%JLu_cr31to7IIY`4Q1z=cFruo_0zS=x&Y{!zOQ8M~mcq`LaCAt7xt0oL@^7{8Tslu&68a)BmD_{~8zU zhmosQMWWaGN_CTz+~<8JBQ?O>Bm?9hK{Y?U_mk9L*QmSSbE{pmqPTby*hQUgS6}Yd z?zl7Fq@;A_1L6t5a(he$v>m_EOyNz-vo?EW34SU4?=L}4f;K$jmD`iS2l@vF2wy$X zKX@NhSPwr%>0iZ1_=HoM?t@;A$}vHMqrS`P-sI%j2uu3y3N)o@8XrLwNZ?f7s+t8* z5BWU{%@i)T_ah_%_|uxG7IrY%L2WSn4?9MQ!s?T){jxbUzNb_FmP@Qe3{1#SeTmf> zzY^pVIM$8Q&x)qao&zINDyW@e;@k02(4_m=c0P#W&?5{Sq^46N^mC2C$>#>QhQI^T-Mfu=gK|#szcvW{ili~Um+`ihy zyUQB=8jwF!Z7vQ3t*86wuUxs(Z(k1bJ)jI8%XviyV8H+mFjco%VA3Yvs|L)HCSLi1 zEO5Fl-hrdXxc7ub-|=`hhPqB!uy4J5*#Tb|Kuy>UmQFj=Y1rWQ;mJ{#IOQdfzzZEO zpEx8LAvU+dzV4lN>DaxoILY#uok$lB=mfOKo-(s^Z~0XIx&oVijL4feVuf=ybMOtb z7hlM8&@%S`-sKlBUc7np28F%Z#NHk6MD^BkX6FdI3^#+)-H}IqfCwN|{#*f$nxJ9G z(_xq_c^LC2yG0vx0QN${WQZJZp|sbkZNES*^U7-AuvMJ5^HWC4YRhoVU`3Yr9=l)L za?PkWgIAOBE9KGrCfeO%iYF1|RfCv86nM~6oirD?Q-CL01Rl_DeVd@L`mXocjQDQw zEwLu4xE{+ut9TcJQc}qnOeVO4DRQLF_LAatchGhJnc)UP^kIqI#a^KBzI^!-4iYjz zf&7txdO5TwnZly^1O%`XOJC(X;#&|qV{Fu?duV9TF9ocxyTJ^~97o^@a{+WLUZYRx zfwIZivg$a0+0kRfH*AP zuRU7&{y~=RkQ~qW3sLhZkRG7cb0ncM;Usg=Ce$04@s|O19oE9Y2mv4o%2_NRK;xsL z*!lS#^2p%9FQLcIgHg(0`SxTMo~fsn9w$W0##hraTdWXQ{_sXu@HIxi-s?7c3wbl2CHECY~U z!pIH|fdBOc%5rQKcz94jmCYifL^MPv7JPy!`lwf@uyx0N|1ys6pfQY~vh$!v0?csO z-K;`SVnf(*@IAkN{mP3#`Mhk_M=f)FxYlIt8DN%!01q^xKAOZUnu<$MgwQ_n#t3-R zq<{YsAJIe>5U;Xig7Z}lKw4X>wR*M*yUhOpC?i)nI*n+5nd)CfAB7gbflME3j#3mA zZS4DaAnb~Pu`y|Vz!9-E87*|>)%z($=I4QdDggY+9!wvrype%Cmchm?J=p^q3BX_w z#KmDHz_aF+c@aTBDp@!6g6rxk*~tJM`wB4^;N#v&?yz0EQT*V4)^FkGp?6L; zU4u2b8PuW}RL(YlrRMAh>)%hQshZrQW=Z>^Zyu)0JG;6P+F9oWw6i5oD5obzm%|v6 zS!0u0w_>t9B6^=F`6d6P0C2_2GsyY)@s>wROJw97fTBNp-ID{rG_QbWrkqrWu>E1F zPU|5ZGc$Pmrc#pQPj z-}`_{Nzs@;0H;cDa&tck%csvKp8=e4La6qji$Alo!58OUKKop6zLW)S68tlzV=e9m zY4o=Nz6&|;;5*D7fT@KlOu5O&=(7kV$y?a}7+}r>1O%Lbj0vF8{w(i*2*5swG-e=H z#t!NVh!Tf~o4>}jwY33Pv|oK?8FIJrDEV@2v}+XNzuxI zU#NdS{UBh^*ocyx`EtZkyq-&m71B8Unps@4z`3Nhuvq%XYUMMa0|d$&6O&ZcoYj?; z$8>j^^n&D>0n}v9ckdF~6#6a~;r(sbx$NsB08kk!?1;4kn43$R?&YERi&5*!<%|ED z46@5*4>t!AiR~+z-g;;O}IjFz_sgtOnAi7<72xtJPCSCK8gaOS19Y_#NB&ACY`INEVLM#0b(dDhz4{FU3Yno+GZXXrkBuF`3 zJNe)hL`hlmM2FhR(&p4pCZ&$gm*_IE6Qc{(^<0GF^vF&ehPRgq&;}auzb7HNM*1r! znOBUCksCx!(c8y(Cnt%ziL$mTR>@*p@ma6wO>JMtoR1$!AH*OQq_g!sa)mx~vjOCSAP#4}7)xYv?vqnMeR8f!g;(@7Cm zXw}&S3?rA_;M>;EXEM0&U-&>_Z0C<~3rZdy+YRA%T9XtJ>n_ekJ*?nwPY(Fq`J$eA z=Z zGR`Np!tT(}iC6fd;F*6OU+RsGl#ZgjjA?-Mxpwt(Ug0)F1%NG17pkgsNC%gbIv6(- z1J=b4*1^}C2KPqVQav?R&uVK=urB6Bed|?Xy~oA+2*13UvW{c-JX4%w9Ih={C^{lF z4PFi|?3W!IHmxcj+0U+w|69K{;(ps~Fk_&RJ8oXJnKO4WVM}Lqze$$Brxld_)l(bQ zQ?pAf!)I@-lD7Cne^&yR$^znKQXQy4?Rv{VxvhBaB>~+h5RWDeX3X1g(6K z+W+{TS%faJQNKmXlh3NW$dG?zKP@(m8m~~}vT;_NomT$7N~e950Mmii+iyUB9dcm} z7O`4pf`7V-bt}s4>q>Xxy>@NF67vLrN^bY=ea6&+GqaEh-4@rnNTz;kQC;Vq&zd3KW zEbu-X$?GS8*!3w8uf!dkIM|wU&@wQz6LLVfSuASfSImyBe^^5-eCs_O6fk6x-`bt;F%}nIx#pDGtE$lT z%X*+=pdPZ)W9k)GJLYvZc7cb8~N9l zhk@iR>m{nDxPNe+7p)$s8+6dVw6ruhEKHxoHzW+{o*aDAU*N|-O;vb%U}h$`xcVe5 zn~uf*>c%NKIBpWOCoq`}%pEOIF(yt6pwK zys)D4MxNa4SZ6Pp-g2jW>OE+&x}?essFP|rl6tF)nw~Yv>+7d?Iwyx6rXINpT!ap> zNN8`fJrk}J9ZP)W;Jvk1T|GG0R+#N+mD{7~pPvPF?5mWZ(iW9~9-EFkyA?pXGfifm ze%P}1sxKw!cjDubNj0$CXs-5){C>xm79WEG^ehzUmS6OzGH1wji9^Jx*Fy zj^g!4%A!s4$DCo#yVel&G#?sWwxs>fdpB=w_FExK0JJEC9`QP$o&>wbL`9SZ9~EJG z_8aCzye-b!a=XTplgqkeW$HxQL{-+_c15+Y%lKG7M}L!A&s4}M=ay5{=Mhm^YaD0n zny<8;+O&IKB9LMeKEy5f1deLivysajkUrV<2DA%TF6%T}q8X=63y-R-0vkgM!#%5n)7uu!&Wqzwd4AVM7WR1(`~W(D;Rmgj>?9Fw=St=kga)GQ7cFS%`u9 z!qsfEQXZM>Q>p)i+MUXG(2*s5HZWJ`qh_=Xi>gbjc&5WEa_DYShz+6bSy|+45NC;B zFjLvdVY3P;>+Gc6jl3;g+2OgBWaygI5xJ-~&TjS%saZ>&`EV`X$$j&dRxPic?dp%N)iR$!K4w>B9A#YPnWVCUi4g zWioAQO6hKp$X%`~XG%I&WTLFyS~Um18Xo?U)@$>9YH^3YcXXIOhZgSQJ%O8+YeQ2o za+hy3i+^yy4BCC(G{HVT5Eb0h!NPlb#1C|{q?D!(lc)5vq(DV_M-*XtQIkDl;??H$ zSum#>9&6LteJod7T>3atKK29R6gh0s+C+Du#=&4y!JD`b z5<4BSu6hYe;r(hb#GJp(Cb%a(zglqdb%M^8wLpRyVQUb&_X<|x;i+gf!xdgr_vFA4 zk6)s@paxo={JW7|Q?KwY?NW2qd+sMl%Ya)@OYu0AyL%K6Rnv0C2_yS*Bl3505l1KQ zM+&17mqJPN!}&N0f#ot44hdZQnsF{5;o-`q|A*w_amjlYA~flTf2yvc_huFjT6^LV?sR7Pki-21T7h1kovAwl5D zrmsfitX@<~)C%jZef-(pc&5xvxMJF9Pc+;9{dS{TTsK|cm`Fo8?|Fd4BIyn1G5R%o zg}TyGfbHor>hkqBO^PTqWwN|*Eu?Nv7-S{)w>UqSGeM=WGT2xgEtu{O4717nHewIpub3{2i`%hAPInp{*5VgNFjt4k^@1p} z)Riv|BWaRtEudbWaL=@(+0(7qQc^UWZ!MalJ$EK5f6dQNI=rg8>KieRB_8rQ`J~`} z$I+enH#a!jwb--{1aJ@mKI6|+eZ7JV+NoPYadEAw=G=>N!mtWFs9ws@{%mgSY|0qo zofex6&P`B;;!A^)y|`HGbcy|9rGKscQcxH0FdFAJbCEi&d_F(Tj0^6t9DY!obdvfk zH%5>eGa7-*@oKIK0m4zNS}Pw=40}A|i(W}Iswb_etKW(*Oz3ZUDIfh;N=3iofM}?4 zPuO_Jcko0ek5VByIrQS&)z`u=0n7Svh!p!E-E@KBV(}{Y^B5byguD))pF%60k2~k8 zHiKlRdDrGS87Rt9Tb`5z?Anv;mYkdet}`{lh-&{{7sn5yhgfqwJh;dSQSDve+>0E3 ze_X+gX!{gfC;4(4OpbT^C7p1`V*V|5!ET4nXPa@97X<<9BLI00voZC30%N0}-YfQn zR2E*eEJW8Xr?r-tf_5fbcwlAlxC)#kp{5ul!`;1Ki?$!vUDl3v9}FL%&u{kHrln%_ zGF9HiuS)mtVcio)Oa^{C-lL{=5tZQd6ITq8s(t8%nWaumnpmbwn%Eo25bJK(77~&l z9#rf8Kt00F?Z8A?>h}tx?y}F4PQl6+_W1dHUIsAg&Nn3m@)m+-n zU?SvhStAdn2Dv6~ri+xQgX%B=iTV5<_91o{cW%1D1A6}2f=9KvQ|ZfVaN0dNUg1x* zSd1ThYH&G%;TP&;Ja9=anfQ#eQ#=S2d-CO4TwI3@8Y;$;SLLQsWo-xDq67E#k!M+J zK5s^i^qPlzn2Uup)=qUHgdFF>Jr==U>v)v!()xFbeqo5@G3c$*o)hCOfI&ixY| z@zLDb9w*q&H11#8zgFE?t^(~IF+bt>q@Pv@mw@_W@5s~QmxxJzv_&4M@Pt1}T8{&R zDFmOYd7DAqvcb>2mc5s_cKmK;X7rL)L+#cQIS&V6!X&rck8c1Oow8;Tu$*O5%jDzAv_Ko zjiZbyhTI2c?4x2|gGL5r)$)xh*c2>mD7W)uaMPn5#GadgJE37AM#2(mgjuwfmGISm$vT}MZaM_Q0yx!mEsemLb}6n`L%hUX~o*CYJ~>Y zCo=eOV9XS;Ux&KpeSQu-)wOQc@6i7*7GUc4z0=TM@-Z^BA{YS>9L5PU@F1M`5B)g> zFff&@b@+WpE#6J2W>c;sd3AJ&oSv)J@rrM$%v0vQjaAyiTp4`s3*yAwD5;-bf@JGa zeMBeGv-VPvS%EdBv^v4pJg}*MImjQ-09~^JuBs;h!kv&Ni*K4&{+!anB?@U;dv~4W zH{)f@P7u3kffT_5G@(AYI~&nb5H0zrW~y^LtMG}b_4o9zcS;vek|md)v0VPQ4VU-rUah}!P3e|uX0xu^hXxU= zZ=c#80Afdypx3}8>U6&K^MEWb+Tz#oqp5=n8hHVR9RL@5z5T19gydDKMqV^B7ZMpU zanN}&0|7qt?f#{5i4c&p+7X~_)o}jieOvY1Z{8namUXsyIn1boO4$1x&XhOG)XQc8W%8t7fLW&nXm;^1hyY z#CV5fYB%2sR^v?Wsz{q4@u}R4F8et#eY0w_Ey^y=SLYW~W2B$Ifo`Q%Hzk=BDKZ%P z2J+dsu*gqU{cP3KCg`uwUWv?s%3TqHOT4L=^aG#Uzf$QkD^4@pdidBz_@CuGq}kr#Y; zQt}4q=pVdHuo!T8Up~4dl;(d+O4cw7M68ebzW5X4`e!P2D07=5a)r;Z#DSr%$kHqP zi(SM+8?R=3KNxFZm_pOJt}iaClB4Qj3KLTlc6BQ}+t_qm@dEFPhamU%!X&j1F?!^x<)nq%MAVG8*~akE zI1s;l=_Bo%Hy4Dfh?&DzEe&266F%I^Y^Rv5)JZ#t{1i~|f-cxKQMgA#o4naZUxM6u zu()x*)J?j^fBviL>VDPnz7KRCMbd0CI6v>cu;dfZY3$+7!Rr=xl&bz`HGFhnK0iT% zT+;p?RnvX2kjxiOWzKF$G>8{E9`m7W1f(}!{&@kJch@1iP*CGR*x-_N0*@fGCS?p* zXbfhCbKvxYBFGdUmAy51HiWOu{k$N~=Rw_Fa~q$bP8}7epTRj%HjG{3j98*xYHFq( zaWG|$Eo?kCry3o6{ijHbpO@>ejf!?YT_kBtK40>ax>r7~w*pGp4CA0~ExwF-3=>jgSRM*F1F6m6H0fioinr8PD+q)FZC~0OC`$G#%bqs>BFCC0M_WpM4lBqli)Z7ayw6$7C z!0c?y%Gfe}^!a2RC*2OvQ;ofG8W4t~Z0gFO_-Ud7cIAPE3>SNuI}6wDrs!T4=BRBA zWNUCEW`$bCBbQh`+^w}-=pC@zSNb*rwve-x03eaOCi zXfOZ7&bt@#){ZZde`yu#4UlIvQQDlu5fi<>FhpX-Gu}b_uc_&iHSF}96y(r%9q3sw zbufn8BO)nsebZM}=a*EJXFliOZ4a&Y#(M*8TV%;@oRLJonzwSv3G^yAbMac-La;}x z@9uaIsq{>|0bSWz2X=& z6}s1a@Au>^YNy>Yo83=IpO5oVg7zx`-O-xQLKV?(|MU%wJ#`djax9b*+J0^JXc@P@ zash!*JaN#_YvAG+iu@54O|A{m@H1W_ij~B~n_)t8l;viKHf{sf*@IHD?l-O20=Nv7 z7N~2ya?Kv)_^|id4Ejf-^}OD5gtZzaJjn>Ljk>S5W&*)JHxz^2CtA!zv;&jEEs9HR zsr**V!P@=Cf1W>2rjDc}1ucSPR02$Noex5|*t#M;sy?748=3g1D0HH;i~D3`7RhRR zkLkE`1zQu$KcP)xu52IDTQ1|UD{zLpQDewJ@!ZLb)Kl0Xeqv;<5Z!T!Z$5-SzK7Oz z4Q$OGv|lk5b$hOF+k@h;tI-1UE!3W!muVeDi)ApU⿱J@bUiNUD|2})lS)GJ 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 literal 0 HcmV?d00001 diff --git a/telegram-bot.js b/telegram-bot.js new file mode 100644 index 0000000..c50d90a --- /dev/null +++ b/telegram-bot.js @@ -0,0 +1,238 @@ +// QwenClaw Telegram Bot - Full Integration +// Listens to Telegram and processes messages through QwenClaw + +const TELEGRAM_BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN || '7975505515:AAHqNCZuFmD3MPJyUSAg81TysQ65K6HuY2s'; +const QWENCLAW_PATH = 'C:\\Users\\admin\\qwenclaw\\bin\\qwenclaw.js'; + +async function getUpdates(offset = 0) { + const url = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/getUpdates?offset=${offset}&timeout=30`; + const response = await fetch(url); + return await response.json(); +} + +async function sendMessage(chatId, text, parseMode = 'Markdown') { + const url = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage`; + const response = await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + chat_id: chatId, + text: text, + parse_mode: parseMode + }) + }); + return await response.json(); +} + +async function sendTyping(chatId) { + const url = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendChatAction`; + await fetch(url, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + chat_id: chatId, + action: 'typing' + }) + }); +} + +async function executeQwenClaw(message) { + const { exec } = require('child_process'); + const util = require('util'); + const execPromise = util.promisify(exec); + + try { + const command = `node "${QWENCLAW_PATH}" send "${message.replace(/"/g, '\\"')}"`; + const { stdout, stderr } = await execPromise(command, { + timeout: 120000, + maxBuffer: 1024 * 1024 * 5 + }); + + return { + success: true, + output: stdout || stderr || 'Task completed' + }; + } catch (error) { + return { + success: true, + output: error.stdout || error.message || 'Task sent to QwenClaw' + }; + } +} + +async function handleCommand(chatId, command) { + console.log(`Command: ${command}`); + + switch(command) { + case '/start': + await sendMessage(chatId, ` +👋 *Welcome to QwenClaw Bot!* + +I'm your AI assistant powered by QwenClaw with 152+ skills. + +*What I can do:* +• Answer questions +• Write code +• Review files +• Automate tasks +• Research topics +• And much more! + +*Commands:* +/status - Check daemon status +/skills - List skills +/help - Show help + +*Just send any message* and I'll process it! + `); + break; + + case '/status': + const { exec } = require('child_process'); + const util = require('util'); + const execPromise = util.promisify(exec); + + try { + const { stdout } = await execPromise(`node "${QWENCLAW_PATH}" status`); + await sendMessage(chatId, ` +🐾 *QwenClaw Status* +━━━━━━━━━━━━━━━━━━━━ +\`\`\` +${stdout} +\`\`\` + `, null); + } catch (error) { + await sendMessage(chatId, '❌ Error getting status: ' + error.message); + } + break; + + case '/skills': + try { + const { stdout } = await execPromise(`node "${QWENCLAW_PATH}" skills`); + await sendMessage(chatId, ` +📚 *Available Skills* +━━━━━━━━━━━━━━━━━━━━ +\`\`\` +${stdout} +\`\`\` + `, null); + } catch (error) { + await sendMessage(chatId, '❌ Error listing skills: ' + error.message); + } + break; + + case '/help': + await sendMessage(chatId, ` +❓ *Help - QwenClaw Bot* + +*How to use:* +Just send me any message and I'll process it through QwenClaw AI! + +*Examples:* +• "Write a Python function to sort a list" +• "Review my latest code changes" +• "Summarize this article: [URL]" +• "Create a todo list for my project" +• "Explain quantum computing" + +*Commands:* +/start - Welcome message +/status - Check daemon status +/skills - List available skills +/help - This help message + +*Powered by QwenClaw v2.0* +152+ skills | Always-on daemon + `); + break; + + default: + await sendMessage(chatId, `❓ Unknown command. Send /help for available commands.`); + } +} + +async function processMessage(chatId, text, messageId) { + console.log(`Processing: ${text}`); + + // Show typing indicator + await sendTyping(chatId); + + // Send acknowledgment + const ackMsg = await sendMessage(chatId, ` +🤖 *Processing your request...* + +\`${text}\` + +⏳ One moment please... + `); + + // Execute QwenClaw + const result = await executeQwenClaw(text); + + // Delete acknowledgment + try { + const deleteUrl = `https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/deleteMessage`; + await fetch(deleteUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + chat_id: chatId, + message_id: ackMsg.result.message_id + }) + }); + } catch (e) { + // Ignore delete errors + } + + // Send response (truncate if too long) + let response = result.output; + if (response.length > 4000) { + response = response.substring(0, 3900) + '\n\n... (truncated)'; + } + + await sendMessage(chatId, ` +✅ *QwenClaw Response:* +━━━━━━━━━━━━━━━━━━━━ +${response} + `, null); +} + +async function main() { + console.log('🤖 QwenClaw Telegram Bot starting...'); + console.log(`Bot: @QwenClaw_X_Bot`); + console.log(`Token: ${TELEGRAM_BOT_TOKEN.substring(0, 15)}...`); + console.log('Listening for messages...\n'); + + let offset = 0; + + while (true) { + try { + const data = await getUpdates(offset); + + if (data.ok && data.result.length > 0) { + for (const update of data.result) { + offset = update.update_id + 1; + + if (update.message) { + const chatId = update.message.chat.id; + const text = update.message.text; + const messageId = update.message.message_id; + + console.log(`[${new Date().toISOString()}] From ${chatId}: ${text}`); + + if (text.startsWith('/')) { + await handleCommand(chatId, text); + } else { + await processMessage(chatId, text, messageId); + } + } + } + } + } catch (error) { + console.error('Error:', error.message); + await new Promise(resolve => setTimeout(resolve, 5000)); + } + } +} + +main();