mirror of
https://github.com/BEDOLAGA-DEV/remnawave-bedolaga-telegram-bot.git
synced 2026-01-19 03:11:47 +00:00
Добавлена полная поддержка DISCOUNT типа в админке:
- Тип "💸 Одноразовая скидка" в селекторе
- Флоу создания: код → процент (1-100) → макс использований → срок промокода (дни) → срок скидки (часы)
- Валидация процента скидки (1-100)
- Валидация срока действия скидки (0-8760 часов)
- Отображение в списках и странице управления
- Новый стейт setting_discount_hours для ввода срока скидки
267 lines
8.7 KiB
Python
267 lines
8.7 KiB
Python
from aiogram.fsm.state import State, StatesGroup
|
||
|
||
class RegistrationStates(StatesGroup):
|
||
waiting_for_language = State()
|
||
waiting_for_rules_accept = State()
|
||
waiting_for_privacy_policy_accept = State()
|
||
waiting_for_referral_code = State()
|
||
|
||
class SubscriptionStates(StatesGroup):
|
||
selecting_period = State()
|
||
selecting_traffic = State()
|
||
selecting_countries = State()
|
||
selecting_devices = State()
|
||
confirming_purchase = State()
|
||
|
||
adding_countries = State()
|
||
adding_traffic = State()
|
||
adding_devices = State()
|
||
extending_subscription = State()
|
||
confirming_traffic_reset = State()
|
||
cart_saved_for_topup = State()
|
||
|
||
# Состояния для простой подписки
|
||
waiting_for_simple_subscription_payment_method = State()
|
||
|
||
# Состояния для кастомных дней/трафика при покупке тарифа
|
||
selecting_custom_days = State()
|
||
selecting_custom_traffic = State()
|
||
confirming_custom_purchase = State()
|
||
|
||
class BalanceStates(StatesGroup):
|
||
waiting_for_amount = State()
|
||
waiting_for_pal24_method = State()
|
||
waiting_for_platega_method = State()
|
||
waiting_for_stars_payment = State()
|
||
waiting_for_support_request = State()
|
||
|
||
|
||
class PromoCodeStates(StatesGroup):
|
||
waiting_for_code = State()
|
||
waiting_for_referral_code = State()
|
||
|
||
class AdminStates(StatesGroup):
|
||
|
||
waiting_for_user_search = State()
|
||
waiting_for_bulk_ban_list = State()
|
||
sending_user_message = State()
|
||
editing_user_balance = State()
|
||
extending_subscription = State()
|
||
adding_traffic = State()
|
||
granting_subscription = State()
|
||
editing_user_subscription = State()
|
||
editing_user_restriction_reason = State()
|
||
|
||
creating_promocode = State()
|
||
setting_promocode_type = State()
|
||
setting_promocode_value = State()
|
||
setting_promocode_uses = State()
|
||
setting_promocode_expiry = State()
|
||
setting_discount_hours = State() # Для DISCOUNT: ввод срока действия скидки в часах
|
||
selecting_promo_group = State()
|
||
|
||
creating_campaign_name = State()
|
||
creating_campaign_start = State()
|
||
creating_campaign_bonus = State()
|
||
creating_campaign_balance = State()
|
||
creating_campaign_subscription_days = State()
|
||
creating_campaign_subscription_traffic = State()
|
||
creating_campaign_subscription_devices = State()
|
||
creating_campaign_subscription_servers = State()
|
||
# Состояния для создания кампании с тарифом
|
||
creating_campaign_tariff_select = State()
|
||
creating_campaign_tariff_days = State()
|
||
|
||
editing_campaign_name = State()
|
||
editing_campaign_start = State()
|
||
editing_campaign_balance = State()
|
||
editing_campaign_subscription_days = State()
|
||
editing_campaign_subscription_traffic = State()
|
||
editing_campaign_subscription_devices = State()
|
||
editing_campaign_subscription_servers = State()
|
||
# Состояния для редактирования кампании с тарифом
|
||
editing_campaign_tariff_select = State()
|
||
editing_campaign_tariff_days = State()
|
||
|
||
waiting_for_broadcast_message = State()
|
||
waiting_for_broadcast_media = State()
|
||
confirming_broadcast = State()
|
||
|
||
creating_promo_group_name = State()
|
||
creating_promo_group_priority = State()
|
||
creating_promo_group_traffic_discount = State()
|
||
creating_promo_group_server_discount = State()
|
||
creating_promo_group_device_discount = State()
|
||
creating_promo_group_period_discount = State()
|
||
creating_promo_group_auto_assign = State()
|
||
|
||
editing_promo_group_menu = State()
|
||
editing_promo_group_name = State()
|
||
editing_promo_group_priority = State()
|
||
editing_promo_group_traffic_discount = State()
|
||
editing_promo_group_server_discount = State()
|
||
editing_promo_group_device_discount = State()
|
||
editing_promo_group_period_discount = State()
|
||
editing_promo_group_auto_assign = State()
|
||
|
||
creating_referral_contest_title = State()
|
||
creating_referral_contest_description = State()
|
||
creating_referral_contest_prize = State()
|
||
creating_referral_contest_mode = State()
|
||
creating_referral_contest_start = State()
|
||
creating_referral_contest_end = State()
|
||
creating_referral_contest_time = State()
|
||
editing_referral_contest_summary_times = State()
|
||
editing_daily_contest_field = State()
|
||
editing_daily_contest_value = State()
|
||
|
||
editing_squad_price = State()
|
||
editing_traffic_price = State()
|
||
editing_device_price = State()
|
||
editing_user_devices = State()
|
||
editing_user_traffic = State()
|
||
editing_user_referrals = State()
|
||
editing_user_referral_percent = State()
|
||
|
||
# Тестовое начисление реферального дохода
|
||
test_referral_earning_input = State()
|
||
|
||
editing_rules_page = State()
|
||
editing_privacy_policy = State()
|
||
editing_public_offer = State()
|
||
creating_faq_title = State()
|
||
creating_faq_content = State()
|
||
editing_faq_title = State()
|
||
editing_faq_content = State()
|
||
editing_notification_value = State()
|
||
|
||
confirming_sync = State()
|
||
|
||
editing_server_name = State()
|
||
editing_server_price = State()
|
||
editing_server_country = State()
|
||
editing_server_limit = State()
|
||
editing_server_description = State()
|
||
editing_server_promo_groups = State()
|
||
|
||
creating_server_uuid = State()
|
||
creating_server_name = State()
|
||
creating_server_price = State()
|
||
creating_server_country = State()
|
||
|
||
editing_welcome_text = State()
|
||
editing_pinned_message = State()
|
||
confirming_pinned_broadcast = State()
|
||
waiting_for_message_buttons = "waiting_for_message_buttons"
|
||
|
||
editing_promo_offer_message = State()
|
||
editing_promo_offer_button = State()
|
||
editing_promo_offer_valid_hours = State()
|
||
editing_promo_offer_active_duration = State()
|
||
editing_promo_offer_discount = State()
|
||
editing_promo_offer_test_duration = State()
|
||
editing_promo_offer_squads = State()
|
||
selecting_promo_offer_user = State()
|
||
searching_promo_offer_user = State()
|
||
|
||
# Состояния для отслеживания источника перехода
|
||
viewing_user_from_balance_list = State()
|
||
viewing_user_from_traffic_list = State()
|
||
viewing_user_from_last_activity_list = State()
|
||
viewing_user_from_spending_list = State()
|
||
viewing_user_from_purchases_list = State()
|
||
viewing_user_from_campaign_list = State()
|
||
viewing_user_from_ready_to_renew_list = State()
|
||
|
||
# Состояния для управления тарифами
|
||
creating_tariff_name = State()
|
||
creating_tariff_description = State()
|
||
creating_tariff_traffic = State()
|
||
creating_tariff_devices = State()
|
||
creating_tariff_tier = State()
|
||
creating_tariff_prices = State()
|
||
creating_tariff_squads = State()
|
||
|
||
editing_tariff_name = State()
|
||
editing_tariff_description = State()
|
||
editing_tariff_traffic = State()
|
||
editing_tariff_devices = State()
|
||
editing_tariff_tier = State()
|
||
editing_tariff_prices = State()
|
||
editing_tariff_device_price = State()
|
||
editing_tariff_max_devices = State()
|
||
editing_tariff_trial_days = State()
|
||
editing_tariff_squads = State()
|
||
editing_tariff_promo_groups = State()
|
||
editing_tariff_traffic_topup_packages = State()
|
||
editing_tariff_max_topup_traffic = State()
|
||
editing_tariff_daily_price = State()
|
||
|
||
|
||
class SupportStates(StatesGroup):
|
||
waiting_for_message = State()
|
||
|
||
class TicketStates(StatesGroup):
|
||
waiting_for_title = State()
|
||
waiting_for_message = State()
|
||
waiting_for_reply = State()
|
||
|
||
class AdminTicketStates(StatesGroup):
|
||
waiting_for_reply = State()
|
||
waiting_for_block_duration = State()
|
||
|
||
class SupportSettingsStates(StatesGroup):
|
||
waiting_for_desc = State()
|
||
|
||
|
||
class BotConfigStates(StatesGroup):
|
||
waiting_for_value = State()
|
||
waiting_for_search_query = State()
|
||
waiting_for_import_file = State()
|
||
|
||
|
||
class PricingStates(StatesGroup):
|
||
waiting_for_value = State()
|
||
|
||
class AutoPayStates(StatesGroup):
|
||
setting_autopay_days = State()
|
||
confirming_autopay_toggle = State()
|
||
|
||
class SquadCreateStates(StatesGroup):
|
||
waiting_for_name = State()
|
||
selecting_inbounds = State()
|
||
|
||
class SquadRenameStates(StatesGroup):
|
||
waiting_for_new_name = State()
|
||
|
||
|
||
class SquadMigrationStates(StatesGroup):
|
||
selecting_source = State()
|
||
selecting_target = State()
|
||
confirming = State()
|
||
|
||
|
||
class RemnaWaveSyncStates(StatesGroup):
|
||
waiting_for_schedule = State()
|
||
|
||
class ContestStates(StatesGroup):
|
||
waiting_for_answer = State()
|
||
|
||
|
||
class AdminSubmenuStates(StatesGroup):
|
||
in_users_submenu = State()
|
||
in_promo_submenu = State()
|
||
in_communications_submenu = State()
|
||
in_settings_submenu = State()
|
||
in_system_submenu = State()
|
||
|
||
|
||
class BlacklistStates(StatesGroup):
|
||
waiting_for_blacklist_url = State()
|
||
|
||
|
||
class ReferralWithdrawalStates(StatesGroup):
|
||
waiting_for_amount = State()
|
||
waiting_for_payment_details = State()
|
||
confirming = State()
|