-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathtasks.py
More file actions
140 lines (105 loc) · 4.96 KB
/
tasks.py
File metadata and controls
140 lines (105 loc) · 4.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import logging
from celery import shared_task
from django.conf import settings
from django.contrib.auth import get_user_model
from pythonpro.discord.bot import devpro_discord_bot_client
from pythonpro.discord.models import DiscordLead, DiscordUser
from pythonpro.memberkit.models import Subscription
logger = logging.getLogger(__name__)
msg = """Olá, sou o bot da DevPro no Discord.
Eu não identifiquei sua conta de Discord em nosso sistema. Por isso eu removi seu acesso.
Você pode conferir todo seus histórico de assinaturas acessando
https://painel.dev.pro.br
Se tiver qualquer dúvida, entre em contato pelo email suporte@dev.pro.br
Um abraço do Bot da DevPro
"""
@shared_task(
rate_limit=1,
max_retries=5,
retry_backoff=True,
retry_backoff_max=700,
retry_jitter=True
)
def clean_discord_user(discord_user_id):
has_discord_access = Subscription.objects.filter(
status=Subscription.Status.ACTIVE,
subscription_types__has_discord_access=True,
subscriber__discorduser__discord_id=discord_user_id
).exists()
lead_status = DiscordLead.Status.ACTIVE if has_discord_access else DiscordLead.Status.INACTIVE
DiscordLead.objects.update_or_create(
defaults={'status': lead_status},
discord_id=discord_user_id
)
if not has_discord_access:
devpro_discord_bot_client.send_user_message(discord_user_id, msg)
devpro_discord_bot_client.remove_guild_member(settings.DISCORD_GUILD_ID, discord_user_id)
logging.info(f'Clean discord user: {discord_user_id} with status: {lead_status.label}')
_SALES_MSG_TEMPLATE = """Usuário: {user_name}
Com licença expirando em {expiration_date}
Id: {user_id}
email: {user_email}
---------------------------------------------------------
"""
_WARN_USER_TEMPLATE = """Olá {user_name},
Sua assinatura anual da DevPro está prestes a expirar, e queremos oferecer uma oportunidade imperdível para que você continue aproveitando todos os benefícios de ser nosso assinante.
Renove agora e garanta um desconto exclusivo de R$ 300!
🔒 Por que renovar sua assinatura?
* Economize R$ 300: Apenas para assinantes atuais, estamos oferecendo um desconto especial de R$ 300 na renovação anual.
* Acesso Ininterrupto: Continue desfrutando de conteúdos exclusivos, cursos atualizados e suporte especializado sem nenhuma interrupção.
* Encontros ao Vivo com Instrutores Experientes: Mantenha o acesso a sessões ao vivo com nossos instrutores especializados, proporcionando aprendizado personalizado e esclarecimento de dúvidas em tempo real.
* Novidades e Exclusividades: Esteja sempre à frente com as últimas novidades e ferramentas que a DevPro tem a oferecer.
⚠️ Atenção: Este desconto de R$ 300 é válido apenas até o vencimento da sua assinatura atual. Após {expiration_date}, o valor cheio será aplicado, e você perderá essa oferta especial.
Não deixe essa oportunidade escapar! Renove sua assinatura agora e continue sua jornada de aprendizado e crescimento profissional com a DevPro.
Para renovar, acesse https://painel.dev.pro.br/checkout/pagarme/renovacao-comunidade-devpro ou entre em contato com nosso suporte através do suporte@dev.pro.br.
Estamos ansiosos para continuar sendo parte do seu sucesso!
Atenciosamente,
Bot DevPro
OBS: Para você não correr os risco de perder essa oportunidade, vou te reenviar essa mensagem uma vez por dia.
""" # noqa: E501 W291
@shared_task(
rate_limit=1,
max_retries=5,
retry_backoff=True,
retry_backoff_max=700,
retry_jitter=True
)
def warn_subscription_expiration(user_id: int, expiration_date: str):
user = get_user_model().objects.select_related('discorduser').get(id=user_id)
devpro_discord_bot_client.send_to_sales_channel(_SALES_MSG_TEMPLATE.format(
user_name=user.first_name,
user_email=user.email,
user_id=user_id,
expiration_date=expiration_date,
))
logging.info(f'Warn msg sent to sales discord channel for user with id {user_id}')
try:
discorduser = user.discorduser
except DiscordUser.DoesNotExist:
logger.info(f'No discord user found for user with id {user.id}')
else:
devpro_discord_bot_client.send_user_message(
discorduser.discord_id,
_WARN_USER_TEMPLATE.format(
user_name=user.first_name,
expiration_date=expiration_date
)
)
logger.info(f'Subscription warn sent to user with id: {user.id}')
return None
_CHECKOUT_STATUS_CHANGED_TEMPLATE = """#####################################
O status agora é {status}
Transaction id = https://beta.dashboard.pagar.me/#/transactions/{transaction_id}
"""
@shared_task(
rate_limit=1,
max_retries=5,
retry_backoff=True,
retry_backoff_max=700,
retry_jitter=True
)
def send_payment_status_change(status, transaction_id):
return devpro_discord_bot_client.send_to_checkout_channel(_CHECKOUT_STATUS_CHANGED_TEMPLATE.format(
status=status,
transaction_id=transaction_id
))