diff --git a/pythonpro/discord/api_client.py b/pythonpro/discord/api_client.py index 4955076f..11ea70bd 100644 --- a/pythonpro/discord/api_client.py +++ b/pythonpro/discord/api_client.py @@ -35,6 +35,38 @@ class DiscordBotClient: def __init__(self, bot_token: str): self._bot_token = bot_token + def get_dm_channel(self, discord_user_id: str): + """ + Reference: https://discord.com/developers/docs/resources/user#create-dm + """ + headers = { + 'Authorization': f'Bot {self._bot_token}' + } + r = requests.post( + f'{_BASE_ENDPOINT_URI}/users/@me/channels', + headers=headers, + json={'recipient_id': discord_user_id} + ) + r.raise_for_status() + dm_channel = r.json() + return dm_channel + + def create_message(self, channel_id: str, msg: str) -> dict: + """ + Reference: https://discord.com/developers/docs/resources/channel#create-message + """ + headers = { + 'Authorization': f'Bot {self._bot_token}' + } + r = requests.post( + f'{_BASE_ENDPOINT_URI}/channels/{channel_id}/messages', + headers=headers, + json={'content': msg} + ) + r.raise_for_status() + message = r.json() + return message + def get_member(self, discord_user_id: str): headers = { 'Authorization': f'Bot {self._bot_token}' diff --git a/pythonpro/discord/bot.py b/pythonpro/discord/bot.py new file mode 100644 index 00000000..66ccb8cf --- /dev/null +++ b/pythonpro/discord/bot.py @@ -0,0 +1,5 @@ +from django.conf import settings + +from pythonpro.discord.api_client import DiscordBotClient + +discord_bot_client = DiscordBotClient(settings.DISCORD_APP_BOT_TOKEN) diff --git a/pythonpro/discord/facade.py b/pythonpro/discord/facade.py index 78ccf943..456947b0 100644 --- a/pythonpro/discord/facade.py +++ b/pythonpro/discord/facade.py @@ -2,11 +2,9 @@ from django.conf import settings -from pythonpro.discord.api_client import DiscordBotClient +from pythonpro.discord.bot import discord_bot_client from pythonpro.discord.tasks import clean_discord_user -discord_bot_client = DiscordBotClient(settings.DISCORD_APP_BOT_TOKEN) - logger = logging.getLogger(__name__) diff --git a/pythonpro/discord/tasks.py b/pythonpro/discord/tasks.py index d4e41c5b..af9bee34 100644 --- a/pythonpro/discord/tasks.py +++ b/pythonpro/discord/tasks.py @@ -2,6 +2,7 @@ from celery import shared_task +from pythonpro.discord.bot import discord_bot_client from pythonpro.discord.models import DiscordLead from pythonpro.memberkit.models import Subscription @@ -28,4 +29,35 @@ def clean_discord_user(discord_user_id): discord_id=discord_user_id ) + if not has_discord_access: + dm_channel = discord_bot_client.get_dm_channel(discord_user_id) + discord_bot_client.create_message(dm_channel['id'], msg) + logging.info(f'Clean discord user: {discord_user_id} with status: {lead_status.label}') + + +msg = """Olá, sou o bot da DevPro no Discord. + +Eu não identifiquei sua conta de Discord em nosso sistema. Então peço a gentileza de você conectar suas conta: + +https://l.dev.pro.br/comunidade + +Para fazer essa conexão você precisa ter uma assinatura com acesso ao discord Ativa. +Você pode conferir seu histórico de assinaturas aqui: + +https://painel.dev.pro.br + +Você pode renovar sua assinatura utilizando o link: + +https://painel.dev.pro.br/checkout/pagarme/renovacao-comunidade-devpro + +Na próxima semana, usuários sem assinatura ativa serão removidos do servidor do Discord. + +Qualquer dúvida, mande mensagem no canal #suporte do servidor do Discord da DevPro: + +https://discord.com/channels/971162582624903288/979392834308280380 + +Eu vou mandar essa mensagem novamente até o dia 26/03/2024. Depois dessa data, sua conta poderá ser removida. + +Um abraço do Bot da DevPro +"""