|
| 1 | +# -*- coding: utf-8 -*- |
| 2 | +from django.conf import settings |
| 3 | +from members.objects import Member |
| 4 | +from requests.sessions import Session |
| 5 | + |
| 6 | +from .utils import api_configured, get_client |
| 7 | + |
| 8 | +logger = logger.getLogger() |
| 9 | + |
| 10 | + |
| 11 | +class SlackMemberSync(object): |
| 12 | + def get_slack_users_simple(self, slack, exclude_api_user=True): |
| 13 | + response = slack.users.list() |
| 14 | + emails = [] |
| 15 | + for member in response.body['members']: |
| 16 | + if 'email' not in memeber['profile']: |
| 17 | + # bot or similar |
| 18 | + continue |
| 19 | + if exclude_api_user and member['name'] == settings.SLACK_API_USERNAME: |
| 20 | + continue |
| 21 | + emails.append((member['id'], member['name'], member['profile']['email'])) |
| 22 | + return emails |
| 23 | + |
| 24 | + def sync_members(self, autodeactivate=False): |
| 25 | + """Sync members, NOTE: https://github.com/ErikKalkoken/slackApiDoc/blob/master/users.admin.setInactive.md says |
| 26 | + deactivation via API works only on paid tiers""" |
| 27 | + with Session() as session: |
| 28 | + slack = get_client(session=session) |
| 29 | + slack_users = self.get_slack_users_simple(slack) |
| 30 | + slac_emails = [x[2] for x in slack_users] |
| 31 | + add_members = Member.objects.exclude(email__in=slack_emails) |
| 32 | + for member in add_members: |
| 33 | + try: |
| 34 | + resp = slack.users.admin.invite(member.email) |
| 35 | + if 'ok' not in resp.body or not resp.body['ok']: |
| 36 | + self.logger.error("Could not invite {}, response: {}".format(member.email, response.body)) |
| 37 | + except Exception as e: |
| 38 | + logger.exception("Got exception when trying to invite {}".format(member.email)) |
| 39 | + # TODO: check which members should be removed |
0 commit comments