Aqui está um exemplo de código para um sistema de bônus extra em uma plataforma de apostas (stake):

“`python
import random
from datetime import datetime, timedelta
from enum import Enum

class BonusType(Enum):
DEPOSIT = “deposit”
RELOAD = “reload”
FREE_SPIN = “free_spin”
CASHBACK = “cashback”
LOYALTY = “loyalty”

class BonusStatus(Enum):
ACTIVE = “active”
USED = “used”
EXPIRED = “expired”
CANCELLED = “cancelled”

class ExtraStakeBonus:
def __init__(self, user_id: str):
self.user_id = user_id
self.active_bonuses = []
self.bonus_history = []

def generate_bonus_code(self, length=8):
“””Gera um código de bônus único”””
chars = “ABCDEFGHJKLMNPQRSTUVWXYZ23456789″
return ”.join(random.choice(chars) for _ in range(length))

def create_deposit_bonus(self, deposit_amount: float, percentage: int = 100,
max_bonus: float = 100, wagering_requirement: int = 30):
“””Cria bônus de depósito”””
bonus_amount = min(deposit_amount * (percentage / 100), max_bonus)

bonus = {
“id”: self.generate_bonus_code(),
“type”: BonusType.DEPOSIT.value,
“amount”: bonus_amount,
“original_amount”: deposit_amount,
“percentage”: percentage,
“wagering_requirement”: wagering_requirement,
“wagering_progress”: 0,
“created_at”: datetime.now(),
“expires_at”: datetime.now() + timedelta(days=7),
“status”: BonusStatus.ACTIVE.value,
“conditions”: {
“min_deposit”: 20,
“max_bet_with_bonus”: 5,
“game_restrictions”: [], # Lista de jogos permitidos
“max_withdrawal”: bonus_amount * 5
}
}

self.active_bonuses.append(bonus)
return bonus

def create_free_spins_bonus(self, spins: int, bet_per_spin: float = 1.0,
game_id: str = “starburst”):
“””Cria bônus de free spins”””
bonus = {
“id”: self.generate_bonus_code(),
“type”: BonusType.FREE_SPIN.value,
“spins”: spins,
“bet_per_spin”: bet_per_spin,
“game_id”: game_id,
“created_at”: datetime.now(),
“expires_at”: datetime.now() + timedelta(days=3),
“status”: BonusStatus.ACTIVE.value,
“winnings”: 0,
“max_winnings”: spins * bet_per_spin * 10 # Limite de ganhos
}

self.active_bonuses.append(bonus)
return bonus

def create_cashback_bonus(self, losses_period: float, percentage: int = 10):
“””Cria bônus de cashback baseado em perdas”””
cashback_amount = losses_period * (percentage / 100)

bonus = {
“id”: self.generate_bonus_code(),
“type”: BonusType.CASHBACK.value,
“amount”: cashback_amount,
“losses_period”: losses_period,
“percentage”: percentage,
“created_at”: datetime.now(),
“expires_at”: datetime.now() + timedelta(days=1),
“status”: BonusStatus.ACTIVE.value,
“conditions”: {
“min_losses”: 50,
“wagering_requirement”: 1
}
}

self.active_bonuses.append(bonus)
return bonus

def update_wagering(self, bonus_id: str, bet_amount: float):
“””Atualiza requisito de rollover”””
for bonus in self.active_bonuses:
if bonus[“id”] == bonus_id and bonus[“status”] == BonusStatus.ACTIVE.value:
if “wagering_requirement” in bonus:
wagering_needed = bonus[“amount”] * bonus[“wagering_requirement”]
bonus[“wagering_progress”] += bet_amount

# Verifica se cumpriu os requisitos
if bonus[“wagering_progress”] >= wagering_needed:
bonus[“status”] = BonusStatus.USED.value
self._move_to_history(bonus)
return True
return False

def use_free_spin(self, bonus_id: str, win_amount: float = 0):
“””Usa um free spin do bônus”””
for bonus in self.active_bonuses:
if bonus[“id”] == bonus_id and bonus[“status”] == BonusStatus.ACTIVE.value:
if bonus[“spins”] > 0:
bonus[“spins”] -= 1
bonus[“winnings”] += win_amount

# Verifica limite de ganhos
if bonus[“winnings”] >= bonus[“max_winnings”]:
bonus[“spins”] = 0

if bonus[“spins”] == 0:
bonus[“status”] = BonusStatus.USED.value
self._move_to_history(bonus)

return True
return False

def check_expired_bonuses(self):
“””Verifica e expira bônus vencidos”””
now = datetime.now()
expired = []

for bonus in self.active_bonuses[:]:
if bonus[“status”] == BonusStatus.ACTIVE.value and bonus[“expires_at”] < now: bonus["status"] = BonusStatus.EXPIRED.value expired.append(bonus) self._move_to_history(bonus) return expired def _move_to_history(self, bonus): """Move bônus para histórico""" self.active_bonuses = [b for b in self.active_bonuses if b["id"] != bonus["id"]] bonus["used_at"] = datetime.now() self.bonus_history.append(bonus) def get_active_bonuses(self): """Retorna bônus ativos""" return [b for b in self.active_bonuses if b["status"] == BonusStatus.ACTIVE.value] def get_bonus_value(self): """Calcula valor total de bônus ativos""" total = 0 for bonus in self.active_bonuses: if bonus["status"] == BonusStatus.ACTIVE.value: if "amount" in bonus: total += bonus["amount"] elif "winnings" in bonus: total += bonus["winnings"] return total # Exemplo de uso class BonusSystem: def __init__(self): self.user_bonuses = {} def get_user_bonus(self, user_id: str): if user_id not in self.user_bonuses: self.user_bonuses[user_id] = ExtraStakeBonus(user_id) return self.user_bonuses[user_id] def apply_deposit_bonus(self, user_id: str, deposit_amount: float): """Aplica bônus de depósito com regras específicas""" user_bonus = self.get_user_bonus(user_id) # Regras de bônus (exemplo)

código bônus extra stake

if deposit_amount >= 100:
return user_bonus.create_deposit_bonus(
deposit_amount,
percentage=200,
max_bonus=500,
wagering_requirement=35
)
elif deposit_amount >= 50:
return user_bonus.create_deposit_bonus(
deposit_amount,
percentage=150,
max_bonus=200,
wagering_requirement=30
)
elif deposit_amount >= 20:
return user_bonus.create_deposit_bonus(
deposit_amount,
percentage=100,
max_bonus=100,
wagering_requirement=25
)
return None

def daily_reward(self, user_id: str, streak_days: int):
“””Recompensa diária baseada em streak”””
user_bonus = self.get_user_bonus(user_id)

if streak_days >= 7:
return user_bonus.create_free_spins_bonus(
spins=50,
bet_per_spin=0.5,
game_id=”book_of_dead”
)
elif streak_days >= 3:
return user_bonus.create_free_spins_bonus(
spins=20,
bet_per_spin=0.2
)
return None

# Teste do sistema
if __name__ == “__main__”:
system = BonusSystem()

# Usuário faz depósito
user_id = “player123″
deposit_bonus = system.apply_deposit_bonus(user_id, 75)
print(f”Bônus de depósito criado: {deposit_bonus[‘amount’]}€”)

# Recompensa diária
daily_bonus = system.daily_reward(user_id, 5)
if daily_bonus:
print(f”Free spins: {daily_bonus[‘spins’]} spins no jogo {daily_bonus[‘game_id’]}”)

# Cashback semanal
user_bonus = system.get_user_bonus(user_id)
cashback = user_bonus.create_cashback_bonus(losses_period=200, percentage=15)
print(f”Cashback: {cashback[‘amount’]}€”)

# Listar bônus ativos
active = user_bonus.get_active_bonuses()
print(f”\nBônus ativos: {len(active)}”)
for bonus in active:
print(f”- {bonus[‘type’]}: {bonus.get(‘amount’, bonus.get(‘spins’, ‘N/A’))}”)
“`

Este código inclui:

## Principais Funcionalidades:

1. **Tipos de Bônus**:
– Bônus de depósito (match bonus)
– Free spins
– Cashback
– Bônus de reload

2. **Características**:
– Códigos de bônus únicos
– Requisitos de rollover (wagering)
– Validade temporal
– Restrições de jogo
– Limites de apostas

3. **Gestão**:
– Controle de status (ativo/usado/expirado)
– Histórico de bônus
– Verificação de expiração
– Cálculo de progresso de rollover

4. **Exemplos de Regras**:
– Bônus progressivo por valor de depósito
– Recompensas por streak diário
– Cashback baseado em perdas

## Para expandir o sistema, você poderia adicionar:

1. **Banco de dados** para persistência
2. **API REST** para integração
3. **Sistema de promoções** sazonais
4. **Programa de fidelidade** (tiers VIP)
5. **Verificação de elegibilidade**
6. **Ferramentas administrativas**
7. **Notificações** de bônus expirando

Lembre-se de adaptar as regras e valores conforme a regulamentação do seu país e os termos da sua plataforma!

Share this post