chore: restructured project

This commit is contained in:
ITQ
2025-03-07 19:32:09 +03:00
parent bfb7ad901a
commit 0a35951c62
178 changed files with 304 additions and 376 deletions
@@ -0,0 +1,19 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
from aiogram_dialog import DialogManager, StartMode
from filters.auth import AuthenticatedFilter
from states.campaigns import CampaignsDailogState
campaigns_router = Router()
@campaigns_router.message(Command("campaigns"), AuthenticatedFilter())
async def stats_command(
message: Message, dialog_manager: DialogManager, state: FSMContext
) -> None:
await dialog_manager.start(
state=CampaignsDailogState.campaigns, mode=StartMode.RESET_STACK
)
+21
View File
@@ -0,0 +1,21 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
from aiogram_dialog import DialogManager
help_router = Router()
@help_router.message(Command("help"))
async def help_command(
message: Message, dialog_manager: DialogManager, state: FSMContext
) -> None:
response = (
"Commands:\n\n"
"/start - Start the bot and authenticate as advertiser\n"
"/campaigns - Manage your campaigns\n"
"/statistics - See your overall statistics\n"
"/logout - Logout of current advertiser account"
)
await message.answer(response)
+20
View File
@@ -0,0 +1,20 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
from aiogram_dialog import DialogManager
logout_router = Router()
@logout_router.message(Command("logout"))
async def logout_command(
message: Message, dialog_manager: DialogManager, state: FSMContext
) -> None:
state_data = await state.get_data()
if state_data["authenticated"]:
await dialog_manager.reset_stack()
del state_data["advertiser_id"]
await state.set_data(state_data)
await message.answer("Successfully logged out.")
+29
View File
@@ -0,0 +1,29 @@
from aiogram import Router
from aiogram.filters import CommandStart
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
from aiogram_dialog import DialogManager, StartMode
from states.start import StartDialogState
start_router = Router()
@start_router.message(CommandStart())
async def start_command(
message: Message, dialog_manager: DialogManager, state: FSMContext
) -> None:
state_data = await state.get_data()
if state_data["authenticated"]:
await message.answer(
"Already authenticated as"
f" <code>{state_data['advertiser']['name']}</code> "
f"(<code>{state_data['advertiser']['advertiser_id']}</code>)."
"Get all commands with /help."
)
return
await dialog_manager.start(
state=StartDialogState.start, mode=StartMode.RESET_STACK
)
+33
View File
@@ -0,0 +1,33 @@
from aiogram import Router
from aiogram.filters import Command
from aiogram.fsm.context import FSMContext
from aiogram.types import Message
from aiogram_dialog import DialogManager
from api.client import AdNovaClient
from filters.auth import AuthenticatedFilter
statistics_router = Router()
@statistics_router.message(Command("statistics"), AuthenticatedFilter())
async def stats_command(
message: Message, dialog_manager: DialogManager, state: FSMContext
) -> None:
state_data = await state.get_data()
advertiser_id = state_data["advertiser_id"]
async with AdNovaClient() as client:
stats = await client.get_advertiser_statistics(advertiser_id)
response = (
f"📊 Overall <code>{state_data['advertiser']['name']}</code>"
" statistics:\n\n"
f"\t• Impressions: {stats.impressions_count}\n"
f"\t• Clicks: {stats.clicks_count}\n"
f"\t• Conversion: {stats.conversion:.2f}%\n"
f"\t• Spent on impressions: {stats.spent_impressions:.2f}\n"
f"\t• Spent on clicks: {stats.spent_clicks:.2f}\n"
f"\t• Spent total: {stats.spent_total:.2f}"
)
await message.answer(response)