From 857dd9a8ec1ff2f05da90f1ddf86ffc75b11d811 Mon Sep 17 00:00:00 2001 From: Vladless Date: Sun, 27 Oct 2024 01:29:34 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA.=20?= =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BC=D0=B5=D0=BB=D0=BA=D0=B8=D1=85=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B4=D0=BE=D1=87=D0=B5=D1=82=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- handlers/__pycache__/admin.cpython-310.pyc | Bin 1914 -> 1287 bytes .../backup_handler.cpython-310.pyc | Bin 660 -> 859 bytes handlers/__pycache__/commands.cpython-310.pyc | Bin 0 -> 5094 bytes .../__pycache__/instructions.cpython-310.pyc | Bin 1144 -> 1163 bytes .../key_management.cpython-310.pyc | Bin 11067 -> 7125 bytes .../__pycache__/trial_key.cpython-310.pyc | Bin 2369 -> 1774 bytes handlers/__pycache__/utils.cpython-310.pyc | Bin 321 -> 1169 bytes handlers/instructions.py | 1 - handlers/key_management.py | 124 +----------------- 9 files changed, 3 insertions(+), 122 deletions(-) create mode 100644 handlers/__pycache__/commands.cpython-310.pyc diff --git a/handlers/__pycache__/admin.cpython-310.pyc b/handlers/__pycache__/admin.cpython-310.pyc index f9d001a3803593bb19dc7702c3b1038673d5b2d5..cf20990ebb70b2d0bf0e486a022cab8d1ca94f4a 100644 GIT binary patch delta 168 zcmeyx*UrV4&&$ij00hU=WYZ_IOyrYcOqr;i%$C9#%%I7&ann*p#?r|VO!ktc!azkA zW?k5QVaJ877xrFkQn=Wt;OU}JI(Y+=I8eJMyG>)P)z)UQ5siXUZ-&rAsQb3ROj>wJ4=oAS zM(|wMlOiSuFP;=yut-n-1FzQ}?6Lnq3i$J^(q zgnqAo=-4iSk9~+-wG(0uRw>>Iz zL#Or;s;8BxXshQ%0S zTqNWoil3}5F@_08(e7&0WtK*}cqmkcqXT|f7JFvlw8|9%ZrPXw6A)cU;SgBFEZ8sz zE@UCLg=cDv(x!9CaLHV_=aJtL{`cs1>-32g%4>4H6io03Rrpy+VMChAS!iPl?DQb~ E1pqgUv;Y7A diff --git a/handlers/__pycache__/backup_handler.cpython-310.pyc b/handlers/__pycache__/backup_handler.cpython-310.pyc index f56943934d7e9a211b640b91359bda74cd0c9398..f1b59aae8ecfa95396a4abd4ea89563d3e4a4573 100644 GIT binary patch delta 513 zcmYjLO-oxr6rDSHUx_bK!KK36wDJfvB5ni`ge;ncSr~8;q#^B0(&&2*Og;pO_>u0U zln`;N;>w+fg{rmgyPDZP|A{N_3yKcRnLGEKbI(08AFYf?r&9#a|Fx<57VT#yVYQ!~ zo@0a=ffd?i8wiIUDLdRbP4WaYdvFHK;%1F9n>jy>9+XooSt5R_zx~1WA##@T%Y|a4 zknf*lcfa81edv;PvJNe}k&xqEa++W`qd*w>OaQS&7-fmT2+bV;GUSanzKiLv+97AY zak1C8itQq%sB=$UsY|`@seAQXA9(6P@6D@Ab>*pRb*FzJtq;|M`ls$<1>Qf{)IaqB zwr)Iii_c%w->YkV_-QZ-$0aLD)}#n4?IxEIZ7^wKP-Im%n_FB;3qR69@Ts(4>kA@X zte<9c-$lrCouJBcdEUvDL?9|(MQflTI}@9lV+eH5rDI?~j4n)o%wV(Vk3@F0A?mUk zN{WqW@R4R$zKP9RqyDmj6zvwSFpP~o!_aq-j&06DC|En-i-5moEOUvAIWAb#r4#TB DVHA<` delta 312 zcmYk1y-LJT5QS$Zo0~-ME*6WGU?mzO_yV$x2x_s7UAn+r7hz+T8y6b|C1M}4SXk|r zK7jZx5q%IV=PLe8ahP*v_?UTBGrw1KyGtNt-&RM@SohZOxK1{=3|5dTqvnC}xKrT* z**E?vvEtxPd>V3i0&!H|Z`3cz!9WPN$jCH?9Ip}K3g*P#0*`><5X1}cw|BG7-;6;} z{;+w(haJ!Q?wUZPRoQuYX>3eZ{bWyIBk4cZceBZ)sVLcYo27e!ZZxf+#y;9*vBNlO xgY2vr*(|ptLE5}ivTuv&g|Xj2xAukmCyvyHdwIdru^FJaQj2KNf>xxdkDuY{J{|x7 diff --git a/handlers/__pycache__/commands.cpython-310.pyc b/handlers/__pycache__/commands.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f62c7e6164bea5206f9cbe0e99c5cc6709ffebf2 GIT binary patch literal 5094 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 literal 0 HcmV?d00001 diff --git a/handlers/__pycache__/instructions.cpython-310.pyc b/handlers/__pycache__/instructions.cpython-310.pyc index 7ef778b6464c54744a2a422f1e01288f50bf77dd..2c08c45fb072a91e2c542012e57f540ffbc16952 100644 GIT binary patch delta 159 zcmeyt(ap)5&&$ij00fztvgwr@d6k(NZ%sC277e?_m6@BEo*G|}SdwvzJ1H?aJ3gtj zq$EG@7Dsk!Wm0}(QOYerh?2CT{9K@9T3Tw+N`@k3pkcoZ^fU5vQ}xSo5>xbDQp@y% r^K7`Y~&WHw|} Yocx{8^~jNOrISfK|LsCza1iBJxn5cM6OjkN@9A9 z#Pv97(OZb7Yf>MuTS-DskT$(du7h@xB=sao=_$Dm+3lo5?~roXPLqtDA)R_B$?92> z({oZEu^U~aTkj@$Jx>aHf%ND-(h#+KNuS;)<(S=12J`_b$L&E<)Qek zv;C>>3DV!$qP#d{cDzJ;NNF=8ITKqPvvc1zS+i3z4sSDZ`xsqjPBPv#yRo);c-|~L zz39`AY&-RAIn66(uh}OZCbzBqTh>kY0dr6?rc89rQ!27SZ+BGT=p0wC)|XvO*_`(~ zr3HmaUrO(&dV4)oTuW>+30$eB66!`Zf;!cs9=nx=hlb5nV`)iTgn}dYSM0ijd4OQYF{+q{uxYtv7q7ZB0``!D-Lm5vA{aQ4 z4uVoOYR(F#r3f7b-5BWnZnbQgJnmrnPz3&M=)*|!w!j!+|Aq>vo8`h2>Qzu2+L#T0 zj?g4~8@Y@o*l2WAodW$ab}yPm$JwK3p>YZnrvV_C%>Zb9g}w*6lK^J{rUA|YbOFG% zWo)z?r1Jps>P3()2q>vL_og$Ty(ECQ;Z@6Vty;BQsn=?lWn;Q{jSb}IL_AMrNj{sCjcO>SBRcqKg6#!bg?LDI}z|;RlKihxCZwM ziFSYoB&He0PH1_dgJfZY?holM&}Ce~U2$Cm?MDC*ArH(MwozlBwd9j~W1_c&`3`&C zGU~f6BzC$z!@SzTV>xhzU0*4?cHQR-9#njPs{)kAnvy_tdgIrwf4mp&2+cVvU*ra` zZUP{H>jM7p3MeVuXBuk`_b=3!sYA!XS^?PgdMw%d2$>t}y`o$WvTXlrbrKlI81FxQ zcBc}0KzSITMF5Y=R@*FUia|dQ5C>=jNC@Cw(TZ$#pm$%b(K0Y(alt+JXQc|djP$o^ zE)ThuILI}~5^V*`-iqU)>D3Bef_A4d@Co2mT!G=x4rFLy`hfj8kQylnv6OF?GqeNXQeZ2d~h`X5Jae4dJn(=SOBm9?z2aOGwK5nDf@Zw)G$Yw?oA(0 zEf_V^#^tRe#B5qxc2`)jxUPN$o*%QHiaF%4FSJa~21TcU5^5I2uFcqg#dOOXVRL)} zl*b8$K4e*Hw|O+4jF6Ct^iPiV2o`U-L)m`&=45H0CH|bf#Nfk z-36JfX1zc~Q4K6=#kO$Gm3bD6dTrjS%1Ub1RI(44a_R=5r{@eYC}f&tU&~x)*!QJu zBMZA}&B&=UwnXdmmW?Si9glCTVGKLXsU~L`3;|l$%UO0U+o4eYT&41#PIKDH$t?RH z1}+bacc8AbVu{G+JPolA^gWdgEK~g)mhjrU@*^`f0`9>Rq;4+T_#||&b5cOiqoJUp sp(xT&8fjjT(kQJ&<=-e$6-|k&Nu=eHD4rKzdlDsl@w*y|d(#O04-7mI-2eap literal 11067 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 C37vib diff --git a/handlers/__pycache__/trial_key.cpython-310.pyc b/handlers/__pycache__/trial_key.cpython-310.pyc index ee744bb221524ec35df44c2f1071a6a1740b2303..c7ccf81837a3251d66e8ba117d21795a8e3b4398 100644 GIT binary patch delta 537 zcmYjNJ&P1U5bd7t@132y*$>=X5YAvZ&oxj%kTdWCO-wdWIvGa0-COM1f!?_TVGa`m z6N9BQG1vb>Np5iX+ztE^h{Wk^~P&`B0Bv}7AA5OG7owFqqdC4-7FKGc8 zgM7hdVGiYIZF2=vv$Ci~ZR))99;pr=qEokWH(lz=xxTaSRp?B+)cwjAyuzDp>i<(Q zTDoOgA!<@A&-J}w@IiZmRMp@NUHCAXAsW(1{?@M*z?Wf-|wYaa=C=N<>YrX+>OZpmDbU i{s*^}Ry+5gpvRmYV8vEF1rBnsg9kXq!R3u{qW=X;*L{Wn delta 1138 zcmZuwO>Ep$5Pt9ZXT87KY&M&u4XKMl>Glu$1GG}xOA=Hhno3QpRu*6xKkvp_|7@SV zfmU8NC6zd!9wJ{s+Hm7gsSS$Msy`9}ap2^=`oeiHoDc_29eYzih-b}s=9?MMyqWRu z#UCprw^+;}IKPRr&7X5yrCI#l*3r2hwm5~Oh!Tsp1x2t$MYJ>Ra;l5gxLr{yshqJU>%BV$u{ny070zK zSp;(wM!V7TXm_v?JsxZfHbMGQ9^8$d4mJm0MGvDV(euIA(GwYb9!8I%7lVz&`Z#(P z?L;r4r$DWp6ERZewNG_wG@7gCTFbH>w|$FwerNr&&u`y(`{b$9XWn`Dy|d?rNo92$ z<5r!E`8C&cVv%VMb?rE#uezpgcy+84N093I%ygRHBUXi|zxKVQwcFvh!c_PLu2l*E zc|5Qx;W4X$5I(^D{Q?yOk!F(C-Oqghqqu~+*&y2=r@3&IymmYvplz~;=Yu@60^G0C z!apcRPS&3c5EZEq?vSH1#c#+B1YXnIXcUK`ceF&u!avCye0g~|7arhdxgkbBoa0X6 znRu#c_^M@S9&lHq230+Sts5+C^NY9^?(!G$RQLyf3?B#&3O5hUL+R-SM{E+*xU4fn z^9>d5uUTr#xIG^JA}sVSfK5;4`|4ys5P*IH@;(7}7gN;5KFoX*cZrYtWE(A_j}LxC zx?GnJP@khD;QsD_5D1iOVfK3R-j66>MGmHX7kU_w7GlQ&u?zlPd@CQ|l^(3ja?F`d zKS$#aHaM?{Zo4;g2rF7nQX~!}yCUf)l0h5pfc_heI#)UnSNJ%KX F`4YSJD#-u< diff --git a/handlers/__pycache__/utils.cpython-310.pyc b/handlers/__pycache__/utils.cpython-310.pyc index b0159a4731bfaece1e32dc5ad9b8ee9c41580285..475ae867a1626f3d78fc5ff29c54c7ee7cd50ef1 100644 GIT binary patch literal 1169 zcmZWoOK%)S5bo}I>^Qci#0eo1LYkl)ScG>I-jM=|uor>^j^qtQT9S;$)4jXnorlvs zv%#ww$-zM&0VmE#_K}-0M6n6UA^d@!YhO9}FL0uI*W^Wws;axHrmOm^>U4JY2m;#k zUhX|I5c*qho+cAE7lFlxASj|ZLY;}m9SnOCk=W=M7*T_n)MRGYq!zXBm>rAOsB;H( zY&u1cfUZ&8M)m0fI0r4&v8uIO%U`sX+sYZRbuaN_rfkl#oF@U+F^8nrHt+(lm;;fa zEle>b1==FpXxo58jiu4-mpAI8%nmSCkc{w-~Qu4i`kfAU*}^ zpL(;O#;iGveA--O!)7~;Qg0>AnteZ^5#yqnXJI57YwPNm@RKkLN6h=LQjLlrAm%Wi z1{DB5re`WX1!ju3P=;3tCDfqik7OH{s6bG+l`n!@{v_|p2l8&UA@{0{Y7xZj@C{EI~ zn_Oi1@YYxBqqFDUc=N5d-+A}F^9LGDz#k6)BXczk6TltroW`ma^wTh40=%;mlP5AB zCcQCa6QRdNz0hL`<9^1x!!Q>6VN?T`(9oP9Cg#Us@k}SRTbKD4u($!@HuSN?84S@T zE=h)UKNr#U)7MC8lqU4ophjVAlTQG_OQ^I8i<$$>U(xy{M6DAj!PF}4!Y;@F@z)Ex zB!yApo706JH9P+plE|OsPW26d^gEzC##IBotKkM1C!lI9p#{|s)pwu)>3e|mZ{uFv zlYhX!`;8@Kgh_YQXtzFXEnIOIE`Pps<<-~f?nld)KXYL$gnRW;Yq{kL#)pi1A$8w( z&zw8B02Lfi5Oq^o-6-`luE$1MVa8&ioG#0P{?L!=HDv~AlBkmr^F`)CBxTfle408Q zhsoILtuY?3B=dVrO+E43lclnPG*2=$a~S1y^C)`0doT7FWcYuc8K_L01VJ`T;^3oX z4xhpfHsRA2ep=td;d*}fQ4q?8lDlDVawP*sW&9Y%ogW83l~}(yKAs)tLY&e(Vjt*t RB6Lm%Id}%oVaJ%U{srrrTblp? delta 167 zcmbQpd60=OpO=@50SG3aluj>Tn8+uiB?siCFr+Z%Fhnt=Fr_l4FsCx6v81r1u(q&7 zF{LmDGib8C1ZnY`*qklM1Z1paDB=K8zr^$t3koI+F{=82M2kU$5MvR@cunRaRv>kY kxwxbVECAMkL~w#+Ic#$CQ%ZAE?HGZ)Viq95!63#60DUtZz5oCK diff --git a/handlers/instructions.py b/handlers/instructions.py index 3c073f60..6a1eb570 100644 --- a/handlers/instructions.py +++ b/handlers/instructions.py @@ -6,7 +6,6 @@ from aiogram.types import (BufferedInputFile, InlineKeyboardButton, from handlers.texts import INSTRUCTIONS - async def send_instructions(callback_query: types.CallbackQuery): await callback_query.message.delete() diff --git a/handlers/key_management.py b/handlers/key_management.py index f11b3906..86843e95 100644 --- a/handlers/key_management.py +++ b/handlers/key_management.py @@ -2,8 +2,7 @@ import uuid from datetime import datetime, timedelta import asyncpg -from aiogram import F, Router, types -from aiogram.filters import Command +from aiogram import F, Router from aiogram.fsm.context import FSMContext from aiogram.fsm.state import State, StatesGroup from aiogram.types import (CallbackQuery, InlineKeyboardButton, @@ -12,17 +11,13 @@ from aiogram.types import (CallbackQuery, InlineKeyboardButton, from auth import link, login_with_credentials from bot import bot, dp from client import add_client -from config import (ADMIN_ID, ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, +from config import (ADMIN_PASSWORD, ADMIN_USERNAME, DATABASE_URL, SERVERS) from database import add_connection, get_balance, store_key, update_balance -from handlers.backup_handler import backup_command from handlers.instructions import send_instructions -from handlers.pay import ReplenishBalanceState, process_custom_amount_input from handlers.profile import process_callback_view_profile -from handlers.start import start_command -from handlers.texts import KEY, KEY_TRIAL, NULL_BALANCE, TRIAL, key_message_success +from handlers.texts import KEY, KEY_TRIAL, NULL_BALANCE, key_message_success from handlers.utils import sanitize_key_name -from handlers.admin import cmd_add_balance router = Router() @@ -121,119 +116,6 @@ async def cancel_create_key(callback_query: CallbackQuery, state: FSMContext): await process_callback_view_profile(callback_query, state) await callback_query.answer() -@router.message(Command('start')) -async def handle_start(message: types.Message, state: FSMContext): - await start_command(message) - -@router.message(Command('add_balance')) -async def handle_add_balance(message: types.Message, state: FSMContext): - await cmd_add_balance(message) - -@router.message(Command('menu')) -async def handle_menu(message: types.Message, state: FSMContext): - await start_command(message) - -@router.message(Command('send_trial')) -async def handle_send_trial_command(message: types.Message, state: FSMContext): - try: - conn = await asyncpg.connect(DATABASE_URL) - try: - records = await conn.fetch(''' - SELECT tg_id FROM connections WHERE trial = 0 - ''') - - if records: - for record in records: - tg_id = record['tg_id'] - trial_message = ( - TRIAL - ) - try: - await bot.send_message(chat_id=tg_id, text=trial_message) - except Exception as e: - if "Forbidden: bot was blocked by the user" in str(e): - print(f"Бот заблокирован пользователем с tg_id: {tg_id}") - else: - print(f"Ошибка при отправке сообщения пользователю {tg_id}: {e}") - - await message.answer("Сообщения о пробном периоде отправлены всем пользователям с не использованным ключом.") - else: - await message.answer("Нет пользователей с не использованными пробными ключами.") - - finally: - await conn.close() - - except Exception as e: - await message.answer(f"Ошибка при отправке сообщений: {e}") - -@router.message(Command('send_to_all')) -async def send_message_to_all_clients(message: types.Message, state: FSMContext): - if message.from_user.id != ADMIN_ID: - await message.answer("У вас нет прав для выполнения этой команды.") - return - - await message.answer("Введите текст сообщения, который вы хотите отправить всем клиентам:") - await state.set_state(Form.waiting_for_message) - -@router.message(Form.waiting_for_message) -async def process_message_to_all(message: types.Message, state: FSMContext): - text_message = message.text - - try: - conn = await asyncpg.connect(DATABASE_URL) - tg_ids = await conn.fetch('SELECT tg_id FROM connections') - - for record in tg_ids: - tg_id = record['tg_id'] - try: - await bot.send_message(chat_id=tg_id, text=text_message) - except Exception as e: - print(f"Ошибка при отправке сообщения пользователю {tg_id}: {e}. Пропускаем этого пользователя.") - - await message.answer("Сообщение было отправлено всем клиентам.") - except Exception as e: - print(f"Ошибка при подключении к базе данных: {e}") - await message.answer("Произошла ошибка при отправке сообщения.") - finally: - await conn.close() - - await state.clear() - -@router.message() -async def handle_text(message: types.Message, state: FSMContext): - current_state = await state.get_state() - - if message.text in ["/send_to_all"]: - await send_message_to_all_clients(message, state) - return - - if message.text == "Мой профиль": - callback_query = types.CallbackQuery( - id="1", - from_user=message.from_user, - chat_instance='', - data='view_profile', - message=message - ) - await process_callback_view_profile(callback_query, state) - return - - if current_state == ReplenishBalanceState.entering_custom_amount.state: - await process_custom_amount_input(message, state) - return - - if current_state == Form.waiting_for_key_name.state: - await handle_key_name_input(message, state) - return - - if message.text == "/backup": - await backup_command(message) - return - - elif current_state is None: - await start_command(message) - - async def handle_key_name_input(message: Message, state: FSMContext): tg_id = message.from_user.id key_name = sanitize_key_name(message.text)