From 1cae20fe5f239dd7cef0bca2b28d63502191475f Mon Sep 17 00:00:00 2001 From: Aaron Kable Date: Fri, 19 May 2023 05:00:39 +0800 Subject: [PATCH 1/2] Dont fail on unknown groups, simply remove them. --- .../services/modules/discord/discord_client/client.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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: From 5f80259d57dbd1f62ace19aede4610fc05267f27 Mon Sep 17 00:00:00 2001 From: Aaron Kable Date: Thu, 13 Jul 2023 20:28:35 +0800 Subject: [PATCH 2/2] fix test --- .../modules/discord/discord_client/tests/test_client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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(