diff --git a/authentication/managers.py b/authentication/managers.py index cee8b1f9..9b2bfb49 100755 --- a/authentication/managers.py +++ b/authentication/managers.py @@ -80,3 +80,10 @@ class AuthServicesInfoManager: authserviceinfo.is_blue = is_blue authserviceinfo.save(update_fields=['is_blue']) + @staticmethod + def update_user_discord_info(username, user_id, user): + if User.objects.filter(username=user.username).exists(): + authserviceinfo = AuthServicesInfoManager.__get_or_create(user) + authserviceinfo.discord_username = username + authserviceinfo.discord_uid = user_id + authserviceinfo.save(update_fields=['discord_username', 'discord_uid']) diff --git a/celerytask/tasks.py b/celerytask/tasks.py index a8f3db71..154e1d5c 100755 --- a/celerytask/tasks.py +++ b/celerytask/tasks.py @@ -9,6 +9,7 @@ from services.managers.mumble_manager import MumbleManager from services.managers.phpbb3_manager import Phpbb3Manager from services.managers.ipboard_manager import IPBoardManager from services.managers.teamspeak3_manager import Teamspeak3Manager +from services.managers.discord_manager import DiscordManager from services.models import AuthTS from services.models import TSgroup from authentication.models import AuthServicesInfo @@ -105,6 +106,17 @@ def update_teamspeak3_groups(user): Teamspeak3Manager.update_groups(authserviceinfo.teamspeak3_uid, groups) +def update_discord_groups(user): + syncgroups = SyncGroupCache.objects.filter(user=user) + authserviceinfo = AuthServicesInfo.objects.get(user=user) + groups = [] + for syncgroup in syncgroups: + groups.append(str(syncgroup.groupname)) + + if len(groups) == 0: + groups.append('empty') + + DiscordManager.update_groups(authserviceinfo.discord_username, groups) def create_syncgroup_for_user(user, groupname, servicename): synccache = SyncGroupCache() @@ -151,6 +163,10 @@ def add_to_databases(user, groups, syncgroups): if syncgroups.filter(groupname=group.name).filter(servicename="ipboard").exists() is not True: create_syncgroup_for_user(user, group.name, "ipboard") update_ipboard_groups(user) + if authserviceinfo.discord_username and authserviceinfo.discord_username != "": + if syncgroups.filter(groupname=group.name).filter(servicename="discord").exists() is not True: + create_syncgroup_for_user(user, group.name, "discord") + update_discord_groups(user) def remove_from_databases(user, groups, syncgroups): @@ -180,6 +196,8 @@ def remove_from_databases(user, groups, syncgroups): update_ipboard_groups(user) if authserviceinfo.teamspeak3_uid and authserviceinfo.teamspeak3_uid != "": update_teamspeak3_groups(user) + if authserviceinfo.discord_username and authserviceinfo.discord_username != "": + update_discord_groups(user) # Run every minute diff --git a/services/managers/discord_manager.py b/services/managers/discord_manager.py index b08dcde7..d957052f 100644 --- a/services/managers/discord_manager.py +++ b/services/managers/discord_manager.py @@ -237,18 +237,17 @@ class DiscordManager: group_ids = [] for g in groups: try: - group_id = DiscordAPIManager.get_group_id(settings.DISCORD_SERVER_ID, g.name) + group_id = DiscordAPIManager.get_group_id(settings.DISCORD_SERVER_ID, g) group_ids.append(group_id) except: # need to create role on server for group - group_ids.append(DiscordManager.create_group(g.name)) + group_ids.append(DiscordManager.create_group(g)) DiscordAPIManager.set_roles(settings.DISCORD_SERVER_ID, user_id, group_ids) @staticmethod def create_group(groupname): - safe_groupname = DiscordManager.__sanatize_username(groupname) new_group = DiscordAPIManager.generate_role(settings.DISCORD_SERVER_ID) - named_group = DiscordAPIManager.edit_role(settings.DISCORD_SERVER_ID, new_group['id'], safe_groupname) + named_group = DiscordAPIManager.edit_role(settings.DISCORD_SERVER_ID, new_group['id'], groupname) return named_group['id'] @staticmethod diff --git a/services/views.py b/services/views.py index f0ba185b..ca1885bd 100755 --- a/services/views.py +++ b/services/views.py @@ -12,6 +12,7 @@ from managers.phpbb3_manager import Phpbb3Manager from managers.mumble_manager import MumbleManager from managers.ipboard_manager import IPBoardManager from managers.teamspeak3_manager import Teamspeak3Manager +from managers.discord_manager import DiscordManager from authentication.managers import AuthServicesInfoManager from eveonline.managers import EveManager from celerytask.tasks import remove_all_syncgroups_for_service @@ -317,3 +318,29 @@ def fleet_fits(request): context = {} return render_to_response('registered/fleetfits.html', context, context_instance=RequestContext(request)) + +@login_required +@user_passes_test(service_blue_alliance_test) +def activate_discord(request): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + character = EveManager.get_character_by_id(authinfo.main_char_id) + info = DiscordManager.add_user(character.character_name) + # If our username is blank means we already had a user + if info[0] is not "": + AuthServicesInfoManager.update_user_discord_info(info[0], info[1], request.user) + update_discord_groups(request.user) + return HttpResponseRedirect("/services/") + return HttpResponseRedirect("/dashboard") + +@login_required +@user_passes_test(service_blue_alliance_test) +def deactivate_discord(request): + authinfo = AuthServicesInfoManager.get_auth_service_info(request.user) + result = DiscordManager.delete_user(authinfo.jabber_username) + remove_all_syncgroups_for_service(request.user, "discord") + # If our username is blank means we failed + if result: + AuthServicesInfoManager.update_user_discord_info("", "", request.user) + return HttpResponseRedirect("/services/") + return HttpResponseRedirect("/dashboard") +