[ADD] Respect and display the new Discord username format when eligible

This commit is contained in:
Peter Pfeufer 2023-08-26 00:47:08 +02:00
parent 36b3077caa
commit 7856cd5ce4
No known key found for this signature in database
GPG Key ID: 6051D2C6AD4EBC27
3 changed files with 60 additions and 7 deletions

View File

@ -6,6 +6,7 @@ from ...admin import ServicesUserAdmin
from . import __title__ from . import __title__
from .models import DiscordUser from .models import DiscordUser
from .utils import LoggerAddTag from .utils import LoggerAddTag
from .auth_hooks import DiscordService
logger = LoggerAddTag(logging.getLogger(__name__), __title__) logger = LoggerAddTag(logging.getLogger(__name__), __title__)
@ -27,6 +28,6 @@ class DiscordUserAdmin(ServicesUserAdmin):
@admin.display(description='Discord Username', ordering='username') @admin.display(description='Discord Username', ordering='username')
def _username(self, obj): def _username(self, obj):
if obj.username and obj.discriminator: return DiscordService.get_discord_username(
return f'{obj.username}#{obj.discriminator}' username=obj.username, discriminator=obj.discriminator
return '' )

View File

@ -30,6 +30,29 @@ class DiscordService(ServicesHook):
self.access_perm = 'discord.access_discord' self.access_perm = 'discord.access_discord'
self.name_format = '{character_name}' self.name_format = '{character_name}'
@staticmethod
def get_discord_username(username:str, discriminator:str) -> str:
"""
Determine the Discord username (Old and new format)
:param username:
:type username:
:param discriminator:
:type discriminator:
:return:
:rtype:
"""
if username and discriminator:
discord_username = f'{username}#{discriminator}'
# New Discord user name format
if discriminator == '0':
discord_username = f'@{username}'
else:
discord_username = ''
return discord_username
def delete_user(self, user: User, notify_user: bool = False) -> None: def delete_user(self, user: User, notify_user: bool = False) -> None:
if self.user_has_account(user): if self.user_has_account(user):
logger.debug('Deleting user %s %s account', user, self.name) logger.debug('Deleting user %s %s account', user, self.name)
@ -43,10 +66,19 @@ class DiscordService(ServicesHook):
user_has_account = True user_has_account = True
username = request.user.discord.username username = request.user.discord.username
discriminator = request.user.discord.discriminator discriminator = request.user.discord.discriminator
if username and discriminator:
discord_username = f'{username}#{discriminator}' discord_username = self.get_discord_username(
else: username=username, discriminator=discriminator
discord_username = '' )
# if username and discriminator:
# discord_username = f'{username}#{discriminator}'
#
# # New Discord user name format
# if discriminator == '0':
# discord_username = f'@{username}'
# else:
# discord_username = ''
else: else:
discord_username = '' discord_username = ''
user_has_account = False user_has_account = False

View File

@ -150,3 +150,23 @@ class TestDiscordService(NoSocketsTestCase):
self.assertTemplateUsed(service.service_ctrl_template) self.assertTemplateUsed(service.service_ctrl_template)
self.assertIn('/discord/reset/', response) self.assertIn('/discord/reset/', response)
self.assertIn('/discord/deactivate/', response) self.assertIn('/discord/deactivate/', response)
def test_new_discord_username_format(self):
"""
Test if we get Discord's new username format
:return:
:rtype:
"""
# given
username = 'william_riker'
discriminator = '0' # Seems to be returned as 0 for Discord's new username format
# when
discord_username = DiscordService.get_discord_username(
username=username, discriminator=discriminator
)
# then
expected_username = '@william_riker'
self.assertEqual(first=discord_username, second=expected_username)