-
Notifications
You must be signed in to change notification settings - Fork 61
Expand file tree
/
Copy pathfacade.py
More file actions
46 lines (38 loc) · 1.71 KB
/
facade.py
File metadata and controls
46 lines (38 loc) · 1.71 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
import logging
from datetime import timedelta
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db.models import Max
from pythonpro.discord.bot import devpro_discord_bot_client
from pythonpro.discord.tasks import clean_discord_user, warn_subscription_expiration
from pythonpro.memberkit.models import Subscription
from django.utils.timezone import datetime
logger = logging.getLogger(__name__)
def clean_discord_users():
discord_user_id = 0
while True:
discord_members = devpro_discord_bot_client.list_guild_members(settings.DISCORD_GUILD_ID, after=discord_user_id)
if len(discord_members) == 0:
break
for member in discord_members:
discord_user = member['user']
discord_user_id = discord_user['id']
is_bot = discord_user.get('bot', False)
if is_bot:
continue
logger.info(f'Scheduling Cleaning discord user with id {discord_user_id}')
clean_discord_user.delay(discord_user_id)
def warn_users_about_subscription_expiration():
today = datetime.today()
thirty_days_in_future = today + timedelta(days=30)
users_with_subscription_expirating = get_user_model().objects.annotate(
max_subscription_expiration_date=Max('subscriptions__expired_at')
).filter(
subscriptions__status=Subscription.Status.ACTIVE,
max_subscription_expiration_date__lte=thirty_days_in_future
).values('id', 'max_subscription_expiration_date')
for user_dct in users_with_subscription_expirating:
warn_subscription_expiration.delay(
user_dct['id'],
user_dct['max_subscription_expiration_date'].strftime('%d/%m/%Y')
)