feat(telegram_bot): added commands folder
This commit is contained in:
@@ -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
|
||||
)
|
||||
@@ -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.")
|
||||
@@ -0,0 +1,27 @@
|
||||
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>"
|
||||
)
|
||||
return
|
||||
|
||||
await dialog_manager.start(
|
||||
state=StartDialogState.start, mode=StartMode.RESET_STACK
|
||||
)
|
||||
@@ -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
|
||||
|
||||
stats_router = Router()
|
||||
|
||||
|
||||
@stats_router.message(Command("stats"), 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)
|
||||
Reference in New Issue
Block a user