diff --git a/app/keys/manager.py b/app/keys/manager.py index 540fc66..9574915 100644 --- a/app/keys/manager.py +++ b/app/keys/manager.py @@ -96,6 +96,8 @@ def lister( filters: list[str] | None = None, select_filters: str | None = None, search: bool = False, + server_back: int | None = None, + user_back: int | None = None, ) -> InlineKeyboardMarkup: kb = InlineKeyboardBuilder() @@ -184,17 +186,66 @@ def lister( ), width=2, ) - + if server_back and not user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.MENU, action=Actions.LIST, panel=server_back + ).pack(), + ), + width=1, + ) + if server_back and user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.USERS, + action=Actions.INFO, + dataid=user_back, + panel=server_back, + ).pack(), + ), + width=1, + ) return kb.as_markup() def cancel( self, + server_back: int | None = None, + user_back: int | None = None, ) -> InlineKeyboardMarkup: kb = InlineKeyboardBuilder() kb.button( text=KeyboardTexts.HOMES, callback_data=PageCB(page=Pages.HOME).pack() ) + + if server_back and not user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.MENU, action=Actions.LIST, panel=server_back + ).pack(), + ), + width=1, + ) + if server_back and user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.USERS, + action=Actions.INFO, + dataid=user_back, + panel=server_back, + ).pack(), + ), + width=1, + ) + return kb.as_markup() def selector( @@ -207,6 +258,8 @@ def selector( panel: int | None = None, extra: str | None = None, all_selects: bool = False, + user_back: int | None = None, + server_back: int | None = None, ) -> InlineKeyboardMarkup: kb = InlineKeyboardBuilder() @@ -321,10 +374,40 @@ def selector( width=1, ) + if server_back and not user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.MENU, action=Actions.LIST, panel=server_back + ).pack(), + ), + width=1, + ) + if server_back and user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.USERS, + action=Actions.INFO, + dataid=user_back, + panel=server_back, + ).pack(), + ), + width=1, + ) + return kb.as_markup() def modify( - self, dataid: int, datatypes: list[Enum], page: Pages, panel: int | None = None + self, + dataid: int, + datatypes: list[Enum], + page: Pages, + panel: int | None = None, + server_back: int | None = None, + user_back: int | None = None, ) -> InlineKeyboardMarkup: kb = InlineKeyboardBuilder() @@ -349,4 +432,28 @@ def modify( width=1, ) + if server_back and not user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.MENU, action=Actions.LIST, panel=server_back + ).pack(), + ), + width=1, + ) + if server_back and user_back: + kb.row( + InlineKeyboardButton( + text=KeyboardTexts.BACK, + callback_data=PageCB( + page=Pages.USERS, + action=Actions.INFO, + dataid=user_back, + panel=server_back, + ).pack(), + ), + width=1, + ) + return kb.as_markup() diff --git a/app/routers/actions/items/admin.py b/app/routers/actions/items/admin.py index 1acc8d1..b13ed45 100644 --- a/app/routers/actions/items/admin.py +++ b/app/routers/actions/items/admin.py @@ -50,7 +50,8 @@ async def fromadmin( admins = await ClinetManager.get_admins(server=server) if not admins: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) return await callback.message.edit_text( @@ -60,6 +61,7 @@ async def fromadmin( types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) @@ -80,7 +82,8 @@ async def toadmin(callback: CallbackQuery, callback_data: SelectCB, state: FSMCo admins = await ClinetManager.get_admins(server=server) if not admins: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) await state.set_state(AdminActionsForm.TO) @@ -91,6 +94,7 @@ async def toadmin(callback: CallbackQuery, callback_data: SelectCB, state: FSMCo types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) @@ -118,6 +122,7 @@ async def confrimaction( types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) @@ -136,7 +141,7 @@ async def action(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon if callback_data.select == YesOrNot.NO.value: track = await callback.message.edit_text( - text=MessageTexts.FAILED, reply_markup=BotKeys.cancel() + text=MessageTexts.FAILED, reply_markup=BotKeys.cancel(server_back=server.id) ) return await tracker.add(track) @@ -176,6 +181,7 @@ async def process_user_batch(users: list[MarzneshinUserResponse]) -> int: await asyncio.sleep(0.01) track = await callback.message.answer( - text=f"Action Finished: {success}/{all_users}", reply_markup=BotKeys.cancel() + text=f"Action Finished: {success}/{all_users}", + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.cleardelete(callback, track) diff --git a/app/routers/actions/items/configs.py b/app/routers/actions/items/configs.py index 88ef25b..7592d56 100644 --- a/app/routers/actions/items/configs.py +++ b/app/routers/actions/items/configs.py @@ -44,7 +44,8 @@ async def select(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon admins = await ClinetManager.get_admins(server=server) if not admins: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -56,6 +57,7 @@ async def select(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) @@ -78,7 +80,8 @@ async def admin(callback: CallbackQuery, callback_data: SelectCB, state: FSMCont configs = await ClinetManager.get_configs(server) if not configs: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -91,6 +94,7 @@ async def admin(callback: CallbackQuery, callback_data: SelectCB, state: FSMCont action=Actions.INFO, panel=server.id, width=1, + server_back=server.id, ), ) @@ -115,7 +119,8 @@ async def action(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon ) if not target_config: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -173,6 +178,7 @@ async def process_user(user: MarzneshinUserResponse): page += 1 track = await callback.message.answer( - text=f"Action Finished: {success}/{all_users}", reply_markup=BotKeys.cancel() + text=f"Action Finished: {success}/{all_users}", + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.cleardelete(callback, track) diff --git a/app/routers/actions/items/users.py b/app/routers/actions/items/users.py index 0d45321..d47970c 100644 --- a/app/routers/actions/items/users.py +++ b/app/routers/actions/items/users.py @@ -51,7 +51,8 @@ async def select(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon admins = await ClinetManager.get_admins(server=server) if not admins: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) admins = [admin.username for admin in admins] @@ -67,6 +68,7 @@ async def select(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) @@ -92,6 +94,7 @@ async def admins(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) @@ -110,7 +113,7 @@ async def action(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon if callback_data.select == YesOrNot.NO.value: track = await callback.message.edit_text( - text=MessageTexts.FAILED, reply_markup=BotKeys.cancel() + text=MessageTexts.FAILED, reply_markup=BotKeys.cancel(server_back=server.id) ) return await tracker.add(track) @@ -134,7 +137,7 @@ async def action(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon ) return await callback.message.edit_text( MessageTexts.SUCCESS if result else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=server.id), ) page = 1 @@ -168,6 +171,7 @@ async def process_user_batch(users: list[MarzneshinUserResponse]) -> int: await asyncio.sleep(0.01) track = await callback.message.answer( - text=f"Action Finished: {success}/{all_users}", reply_markup=BotKeys.cancel() + text=f"Action Finished: {success}/{all_users}", + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.cleardelete(callback, track) diff --git a/app/routers/actions/menu.py b/app/routers/actions/menu.py index e193495..5caa092 100644 --- a/app/routers/actions/menu.py +++ b/app/routers/actions/menu.py @@ -38,5 +38,6 @@ async def data(callback: CallbackQuery, callback_data: PageCB): types=Pages.ACTIONS, action=Actions.INFO, panel=server.id, + server_back=server.id, ), ) diff --git a/app/routers/base.py b/app/routers/base.py index 7793f05..7c6d7af 100644 --- a/app/routers/base.py +++ b/app/routers/base.py @@ -58,6 +58,7 @@ async def start(message: Message, state: FSMContext): action=Actions.MODIFY, extra=user.username, panel=server.id, + server_back=server.id, ), ) return await tracker.add(track) diff --git a/app/routers/servers/data.py b/app/routers/servers/data.py index ebae579..fa41fdc 100644 --- a/app/routers/servers/data.py +++ b/app/routers/servers/data.py @@ -34,5 +34,6 @@ async def data(callback: CallbackQuery, callback_data: PageCB): ], page=Pages.SERVERS, panel=server.id, + server_back=server.id, ), ) diff --git a/app/routers/servers/modify.py b/app/routers/servers/modify.py index 3cbf601..eb028ca 100644 --- a/app/routers/servers/modify.py +++ b/app/routers/servers/modify.py @@ -60,11 +60,14 @@ async def start_modify( types=Pages.SERVERS, action=Actions.MODIFY, panel=server.id, + server_back=server.id, ), ) await state.set_state(ServerModifyForm.ALL) - return await callback.message.edit_text(text=text, reply_markup=BotKeys.cancel()) + return await callback.message.edit_text( + text=text, reply_markup=BotKeys.cancel(server_back=server.id) + ) @router.message(StateFilter(ServerModifyForm.ALL)) @@ -113,7 +116,7 @@ async def finish_modify(message: Message, state: FSMContext): await state.clear() track = await message.answer( text=MessageTexts.SUCCESS if server_modify else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=serverid), ) return await tracker.cleardelete(message, track) @@ -132,7 +135,7 @@ async def remove(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon if callback_data.select == YesOrNot.NO.value: track = await callback.message.edit_text( - text=MessageTexts.FAILED, reply_markup=BotKeys.cancel() + text=MessageTexts.FAILED, reply_markup=BotKeys.cancel(server_back=server.id) ) return await tracker.add(track) @@ -157,5 +160,5 @@ async def remove(callback: CallbackQuery, callback_data: SelectCB, state: FSMCon ) return await callback.message.edit_text( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=server.id), ) diff --git a/app/routers/stats/show.py b/app/routers/stats/show.py index 12d9e3e..e06e1fa 100644 --- a/app/routers/stats/show.py +++ b/app/routers/stats/show.py @@ -100,6 +100,6 @@ async def show_stats(callback: CallbackQuery, callback_data: PageCB): ) track = await callback.message.edit_text( - text=stats_text, reply_markup=BotKeys.cancel(), parse_mode="HTML" + text=stats_text, reply_markup=BotKeys.cancel(server_back=server.id) ) await tracker.add(track) diff --git a/app/routers/users/create.py b/app/routers/users/create.py index a5c119b..ff4a9ea 100644 --- a/app/routers/users/create.py +++ b/app/routers/users/create.py @@ -59,7 +59,8 @@ async def data(callback: CallbackQuery, callback_data: PageCB, state: FSMContext admins = await ClinetManager.get_admins(server=server) if not admins: await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await callback.message.edit_text( @@ -69,6 +70,7 @@ async def data(callback: CallbackQuery, callback_data: PageCB, state: FSMContext types=Pages.USERS, action=Actions.CREATE, panel=server.id, + server_back=server.id, ), ) @@ -93,6 +95,7 @@ async def adminselect( action=Actions.JSON, panel=callback_data.panel, width=1, + server_back=int(await state.get_value("panel")), ), ) @@ -113,7 +116,7 @@ async def json_start( text = MessageTexts.ASK_COUNT return await callback.message.edit_text( text=text, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=int(await state.get_value("panel"))), ) @@ -137,7 +140,8 @@ async def json_input(message: Message, state: FSMContext): uploaded_json=[user.to_dict() for user in validated_users] ) await state.set_state(UserCreateForm.CONFIGS) - server = await crud.get_server(int(await state.get_value("panel"))) + serverid = int(await state.get_value("panel")) + server = await crud.get_server(serverid) if not server: track = await message.answer( text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() @@ -147,7 +151,8 @@ async def json_input(message: Message, state: FSMContext): configs = await ClinetManager.get_configs(server) if not configs: track = await message.answer( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=serverid), ) return await tracker.cleardelete(message, track) @@ -162,6 +167,7 @@ async def json_input(message: Message, state: FSMContext): selects=[config.name for config in configs], panel=server.id, all_selects=True, + server_back=serverid, ), ) return await tracker.cleardelete(message, track) @@ -180,7 +186,8 @@ async def username(message: Message, state: FSMContext): await state.update_data(username=message.text) await state.set_state(UserCreateForm.USERCOUNT) track = await message.answer( - text=MessageTexts.ASK_COUNT, reply_markup=BotKeys.cancel() + text=MessageTexts.ASK_COUNT, + reply_markup=BotKeys.cancel(int(await state.get_value("panel"))), ) return await tracker.cleardelete(message, track) @@ -190,7 +197,7 @@ async def usercount(message: Message, state: FSMContext): if not message.text.isdigit() or int(message.text) < 1: track = await message.answer(text=MessageTexts.WRONG_INT) return await tracker.add(track) - + serverid = int(await state.get_value("panel")) await state.update_data(usercount=message.text) if int(message.text) == 1: templates = await crud.get_templates(active=True) @@ -203,6 +210,7 @@ async def usercount(message: Message, state: FSMContext): types=Pages.USERS, action=Actions.CREATE, width=1, + server_back=serverid, ), ) return await tracker.cleardelete(message, track) @@ -212,7 +220,9 @@ async def usercount(message: Message, state: FSMContext): await state.set_state(UserCreateForm.USERSUFFIX) text = MessageTexts.ASK_SUFFIX - track = await message.answer(text=text, reply_markup=BotKeys.cancel()) + track = await message.answer( + text=text, reply_markup=BotKeys.cancel(server_back=serverid) + ) return await tracker.cleardelete(message, track) @@ -221,13 +231,14 @@ async def userprefix(message: Message, state: FSMContext): if not message.text.isdigit() or int(message.text) < 1: track = await message.answer(text=MessageTexts.WRONG_INT) return await tracker.add(track) - + serverid = int(await state.get_value("panel")) await state.update_data(usersuffix=message.text) templates = await crud.get_templates(active=True) if not templates: await state.set_state(UserCreateForm.DATA_LIMIT) track = await message.answer( - text=MessageTexts.ASK_DATA_LIMT, reply_markup=BotKeys.cancel() + text=MessageTexts.ASK_DATA_LIMT, + reply_markup=BotKeys.cancel(server_back=serverid), ) return await tracker.cleardelete(message, track) @@ -239,6 +250,7 @@ async def userprefix(message: Message, state: FSMContext): types=Pages.USERS, action=Actions.CREATE, width=1, + server_back=serverid, ), ) await tracker.cleardelete(message, track) @@ -251,16 +263,19 @@ async def userprefix(message: Message, state: FSMContext): async def templateselect( callback: CallbackQuery, callback_data: SelectCB, state: FSMContext ): + panelid = int(await state.get_value("panel")) if callback_data.select == "CUSTOM": await state.set_state(UserCreateForm.DATA_LIMIT) track = await callback.message.answer( - text=MessageTexts.ASK_DATA_LIMT, reply_markup=BotKeys.cancel() + text=MessageTexts.ASK_DATA_LIMT, + reply_markup=BotKeys.cancel(server_back=panelid), ) return await tracker.cleardelete(callback, track) template = await crud.get_template(int(callback_data.select.split()[0])) if not template: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=panelid), ) return await tracker.add(track) @@ -268,7 +283,6 @@ async def templateselect( await state.update_data(datelimit=template.date_limit) await state.update_data(datetypes=template.date_types) - panelid = int(await state.get_value("panel")) await state.set_state(UserCreateForm.CONFIGS) server = await crud.get_server(panelid) if not server: @@ -280,7 +294,8 @@ async def templateselect( configs = await ClinetManager.get_configs(server) if not configs: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -295,6 +310,7 @@ async def templateselect( selects=[config.name for config in configs], panel=server.id, all_selects=True, + server_back=server.id, ), ) @@ -307,6 +323,7 @@ async def datalimit(message: Message, state: FSMContext): await state.update_data(datalimit=message.text) await state.set_state(UserCreateForm.DATE_TYPE) + serverid = await state.get_value("panel") track = await message.answer( text=MessageTexts.MENU, reply_markup=BotKeys.selector( @@ -314,7 +331,8 @@ async def datalimit(message: Message, state: FSMContext): types=Pages.USERS, action=Actions.CREATE, width=1, - panel=await state.get_value("panel"), + panel=serverid, + server_back=serverid, ), ) return await tracker.cleardelete(message, track) @@ -341,7 +359,8 @@ async def datetypes( configs = await ClinetManager.get_configs(server) if not configs: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -356,12 +375,14 @@ async def datetypes( selects=[config.name for config in configs], panel=server.id, all_selects=True, + server_back=server.id, ), ) else: await state.set_state(UserCreateForm.DATE_LIMIT) return await callback.message.edit_text( - text=MessageTexts.ASK_DATE_LIMIT, reply_markup=BotKeys.cancel() + text=MessageTexts.ASK_DATE_LIMIT, + reply_markup=BotKeys.cancel(server_back=server.id), ) @@ -383,7 +404,8 @@ async def datelimit(message: Message, state: FSMContext): configs = await ClinetManager.get_configs(server) if not configs: track = await message.answer( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -398,6 +420,7 @@ async def datelimit(message: Message, state: FSMContext): selects=[config.name for config in configs], panel=server.id, all_selects=True, + server_back=server.id, ), ) return await tracker.cleardelete(message, track) @@ -442,6 +465,7 @@ async def configs(callback: CallbackQuery, callback_data: SelectCB, state: FSMCo selects=[select["name"] for select in selects], panel=data["panel"], all_selects=True, + server_back=data["panel"], ), ) @@ -531,8 +555,8 @@ async def createusers( await asyncio.sleep(0.5) await state.clear() - servers = await crud.get_servers() track = await callback.message.answer( - text=MessageTexts.START, reply_markup=BotKeys.home(servers) + text=MessageTexts.LETS_BACK, + reply_markup=BotKeys.cancel(server_back=data["panel"]), ) return await tracker.cleardelete(callback, track) diff --git a/app/routers/users/data.py b/app/routers/users/data.py index 7a316c2..212658d 100644 --- a/app/routers/users/data.py +++ b/app/routers/users/data.py @@ -44,5 +44,6 @@ async def data(callback: CallbackQuery, callback_data: PageCB): action=Actions.MODIFY, extra=user.username, panel=server.id, + server_back=server.id, ), ) diff --git a/app/routers/users/menu.py b/app/routers/users/menu.py index 22517c0..c7fbeb1 100644 --- a/app/routers/users/menu.py +++ b/app/routers/users/menu.py @@ -51,5 +51,6 @@ async def data(callback: CallbackQuery, callback_data: PageCB): control=control, select_filters=filter_select, filters=filters_buttons, + server_back=server.id, ), ) diff --git a/app/routers/users/modify/charge.py b/app/routers/users/modify/charge.py index 7e9e248..b64bff6 100644 --- a/app/routers/users/modify/charge.py +++ b/app/routers/users/modify/charge.py @@ -41,7 +41,10 @@ async def chargestart( templates = await crud.get_templates(active=True) if not templates: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) return await tracker.add(track) @@ -56,6 +59,8 @@ async def chargestart( panel=server.id, extra=callback_data.extra, width=1, + server_back=server.id, + user_back=callback_data.extra, ), ) @@ -90,6 +95,8 @@ async def chargeend( extra=callback_data.extra, panel=server.id, width=1, + server_back=server.id, + user_back=await state.get_value("username"), ), ) @@ -116,7 +123,10 @@ async def confirmend( ): if callback_data.select == YesOrNot.NO.value: track = await callback.message.edit_text( - text=MessageTexts.FAILED, reply_markup=BotKeys.cancel() + text=MessageTexts.FAILED, + reply_markup=BotKeys.cancel( + server_back=callback_data.panel, user_back=callback_data.extra + ), ) return await tracker.add(track) @@ -124,7 +134,10 @@ async def confirmend( template = await crud.get_template(int(data["templateid"])) if not template: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel( + server_back=callback_data.panel, user_back=callback_data.extra + ), ) return await tracker.add(track) @@ -138,7 +151,8 @@ async def confirmend( user = await ClinetManager.get_user(server, data["username"]) if not user: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel(server_back=server.id), ) return await tracker.add(track) @@ -157,5 +171,7 @@ async def confirmend( return await callback.message.edit_text( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=callback_data.panel, user_back=callback_data.extra + ), ) diff --git a/app/routers/users/modify/configs.py b/app/routers/users/modify/configs.py index 05165ce..63b05ef 100644 --- a/app/routers/users/modify/configs.py +++ b/app/routers/users/modify/configs.py @@ -41,7 +41,10 @@ async def configstart( configs = await ClinetManager.get_configs(server=server) if not configs: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) return await tracker.add(track) @@ -59,6 +62,8 @@ async def configstart( panel=server.id, extra=callback_data.extra, all_selects=True, + server_back=server.id, + user_back=callback_data.extra, ), ) @@ -97,7 +102,9 @@ async def configselect( await state.clear() return await callback.message.edit_text( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) selected = callback_data.select @@ -127,5 +134,7 @@ async def configselect( panel=int(data["panel"]), extra=callback_data.extra, all_selects=True, + server_back=int(data["panel"]), + user_back=callback_data.extra, ), ) diff --git a/app/routers/users/modify/confirm.py b/app/routers/users/modify/confirm.py index aa50c6f..a8e60e6 100644 --- a/app/routers/users/modify/confirm.py +++ b/app/routers/users/modify/confirm.py @@ -67,6 +67,8 @@ async def confirmstart( action=Actions.MODIFY, extra=callback_data.extra, panel=server.id, + server_back=server.id, + user_back=callback_data.extra, ), ) @@ -91,7 +93,10 @@ async def confirmend( ): if callback_data.select == YesOrNot.NO.value: track = await callback.message.edit_text( - text=MessageTexts.FAILED, reply_markup=BotKeys.cancel() + text=MessageTexts.FAILED, + reply_markup=BotKeys.cancel( + server_back=callback_data.panel, user_back=callback_data.extra + ), ) return await tracker.add(track) @@ -140,5 +145,7 @@ async def confirmend( return await callback.message.edit_text( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) diff --git a/app/routers/users/modify/datalimit.py b/app/routers/users/modify/datalimit.py index 212c1dc..3dff1f9 100644 --- a/app/routers/users/modify/datalimit.py +++ b/app/routers/users/modify/datalimit.py @@ -42,7 +42,9 @@ async def datestart( await state.set_state(UserModifyForm.DATA_LIMIT) return await callback.message.edit_text( text=MessageTexts.ASK_DATA_LIMT, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) @@ -70,6 +72,6 @@ async def dateend(message: Message, state: FSMContext): ) track = await message.answer( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=server.id, user_back=data["username"]), ) return await tracker.cleardelete(message, track) diff --git a/app/routers/users/modify/datelimit.py b/app/routers/users/modify/datelimit.py index 5fbd94b..e4631a8 100644 --- a/app/routers/users/modify/datelimit.py +++ b/app/routers/users/modify/datelimit.py @@ -49,6 +49,8 @@ async def selecttype( width=1, panel=callback_data.panel, extra=callback_data.extra, + server_back=server.id, + user_back=callback_data.extra, ), ) @@ -77,7 +79,9 @@ async def datelimit( await state.clear() return await callback.message.edit_text( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) else: @@ -87,7 +91,9 @@ async def datelimit( await state.set_state(UserModifyForm.DATE_LIMIT) return await callback.message.edit_text( text=MessageTexts.ASK_DATE_LIMIT, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=callback_data.panel, user_back=callback_data.extra + ), ) @@ -116,6 +122,6 @@ async def dateend(message: Message, state: FSMContext): await state.clear() track = await message.answer( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=server.id, user_back=data["username"]), ) return await tracker.cleardelete(message, track) diff --git a/app/routers/users/modify/note.py b/app/routers/users/modify/note.py index 87b761d..005e995 100644 --- a/app/routers/users/modify/note.py +++ b/app/routers/users/modify/note.py @@ -40,7 +40,9 @@ async def datestart( await state.set_state(UserModifyForm.NOTE) return await callback.message.edit_text( text=MessageTexts.ASK_NOTE, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) @@ -66,6 +68,6 @@ async def dateend(message: Message, state: FSMContext): ) track = await message.answer( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel(server_back=server.id, user_back=data["username"]), ) return await tracker.cleardelete(message, track) diff --git a/app/routers/users/modify/owner.py b/app/routers/users/modify/owner.py index 48f7aed..06d8147 100644 --- a/app/routers/users/modify/owner.py +++ b/app/routers/users/modify/owner.py @@ -40,7 +40,10 @@ async def ownerstart( admins = await ClinetManager.get_admins(server=server) if not admins: track = await callback.message.edit_text( - text=MessageTexts.NOT_FOUND, reply_markup=BotKeys.cancel() + text=MessageTexts.NOT_FOUND, + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) return await tracker.add(track) @@ -54,6 +57,8 @@ async def ownerstart( action=Actions.MODIFY, panel=server.id, extra=callback_data.extra, + server_back=server.id, + user_back=callback_data.extra, ), ) @@ -76,5 +81,7 @@ async def ownerend(callback: CallbackQuery, callback_data: SelectCB, state: FSMC await state.clear() return await callback.message.edit_text( text=MessageTexts.SUCCESS if action else MessageTexts.FAILED, - reply_markup=BotKeys.cancel(), + reply_markup=BotKeys.cancel( + server_back=server.id, user_back=callback_data.extra + ), ) diff --git a/app/routers/users/search.py b/app/routers/users/search.py index d9b2821..b7e64f2 100644 --- a/app/routers/users/search.py +++ b/app/routers/users/search.py @@ -25,7 +25,6 @@ async def data(message: Message): except ValueError: track = await message.reply( text=f"{MessageTexts.WRONG_PATTERN}\n/user serverid username", - reply_markup=BotKeys.cancel(), ) return await tracker.add(track) @@ -41,7 +40,11 @@ async def data(message: Message): track = await message.answer( text=MessageTexts.ITEMS, reply_markup=BotKeys.lister( - items=users, page=Pages.USERS, panel=server.id, search=True + items=users, + page=Pages.USERS, + panel=server.id, + search=True, + server_back=server.id, ), ) return await tracker.cleardelete(message, track) @@ -62,7 +65,8 @@ async def start_search( await state.set_state(UserSearchForm.USERNAME) await state.update_data(serverid=server.id) return await callback.message.edit_text( - text=MessageTexts.ASK_USERNAME, reply_markup=BotKeys.cancel() + text=MessageTexts.ASK_USERNAME, + reply_markup=BotKeys.cancel(server_back=server.id), ) @@ -80,7 +84,11 @@ async def end_search(message: Message, state: FSMContext): track = await message.answer( text=MessageTexts.ITEMS, reply_markup=BotKeys.lister( - items=users, page=Pages.USERS, panel=server.id, search=True + items=users, + page=Pages.USERS, + panel=server.id, + search=True, + server_back=server.id, ), ) return await tracker.cleardelete(message, track) diff --git a/app/settings/language/_keyboard.py b/app/settings/language/_keyboard.py index 74d6a62..213ac77 100644 --- a/app/settings/language/_keyboard.py +++ b/app/settings/language/_keyboard.py @@ -22,3 +22,4 @@ class _KeyboardSettings(BaseSettings): STATS: str = "📊 Stats" SELECTS_ALL: str = "Select All" DESELECTS_ALL: str = "DeSelect All" + BACK: str = "◀️ Back" diff --git a/app/settings/language/_message.py b/app/settings/language/_message.py index 3acaeaf..7bbb03a 100644 --- a/app/settings/language/_message.py +++ b/app/settings/language/_message.py @@ -11,6 +11,7 @@ class _MessageSettings(BaseSettings): f"Welcome to HolderBot 🤖 [{__version__}]\n" "Developed and designed by @ErfJabs\n" ) + LETS_BACK: str = "Let's back..." ITEMS_MENU: str = "Select a item or create a new:" ITEMS: str = "Select items" MENU: str = "Select a Button"