diff --git a/allianceauth/services/modules/discord/discord_client/client.py b/allianceauth/services/modules/discord/discord_client/client.py index 65da9e0c..048088e3 100644 --- a/allianceauth/services/modules/discord/discord_client/client.py +++ b/allianceauth/services/modules/discord/discord_client/client.py @@ -588,16 +588,17 @@ class DiscordClient: return None # User is no longer a member guild_roles = RolesSet(self.guild_roles(guild_id=guild_id)) logger.debug('Current guild roles: %s', guild_roles.ids()) + _roles = set(member_info.roles) if not guild_roles.has_roles(member_info.roles): guild_roles = RolesSet( self.guild_roles(guild_id=guild_id, use_cache=False) ) if not guild_roles.has_roles(member_info.roles): role_ids = set(member_info.roles).difference(guild_roles.ids()) - raise RuntimeError( - f'Discord user {user_id} has unknown roles: {role_ids}' - ) - return guild_roles.subset(member_info.roles) + logger.warning(f'Discord user {user_id} has unknown roles: {role_ids}') + for _r in role_ids: + _roles.remove(_r) + return guild_roles.subset(_roles) @classmethod def _is_member_unknown_error(cls, r: requests.Response) -> bool: diff --git a/allianceauth/services/modules/discord/discord_client/tests/test_client.py b/allianceauth/services/modules/discord/discord_client/tests/test_client.py index adf22323..5c7a5bf4 100644 --- a/allianceauth/services/modules/discord/discord_client/tests/test_client.py +++ b/allianceauth/services/modules/discord/discord_client/tests/test_client.py @@ -899,8 +899,8 @@ class TestGuildMemberRoles(NoSocketsTestCase): mock_guild_roles.return_value = {role_a, role_b} client = DiscordClientStub(TEST_BOT_TOKEN, mock_redis) # when/then - with self.assertRaises(RuntimeError): - client.guild_member_roles(TEST_GUILD_ID, TEST_USER_ID) + roles = client.guild_member_roles(TEST_GUILD_ID, TEST_USER_ID) + self.assertEqual(roles, RolesSet([role_a])) # TODO: Re-enable after adding Discord general error handling # def test_should_raise_exception_if_member_info_is_invalid(