public async Task <AuthenticationTicket?> OnSignInAsync( ulong userId, string username, string discriminator, string avatarHash, Func <CancellationToken, Task <IEnumerable <ulong> > > getGuildIdsDelegate, CancellationToken cancellationToken = default) { AuthenticationLogMessages.UserSigningIn(_logger, userId, username, discriminator); // Don't bother tracking or retrieving permissions for users we don't care about. var isAdmin = _authorizationConfiguration.AdminUserIds.Contains(userId); if (!isAdmin && !(await IsMemberAsync(userId, getGuildIdsDelegate, cancellationToken))) { AuthenticationLogMessages.UserIgnored(_logger, userId, username, discriminator); return(null); } await _usersService.TrackUserAsync( userId, username, discriminator, avatarHash, cancellationToken); AuthenticationLogMessages.UserTracked(_logger, userId); AuthenticationLogMessages.AuthenticationTicketActiveIdFetching(_logger, userId); var ticketId = await GetActiveTicketIdAsync(userId, cancellationToken); AuthenticationLogMessages.AuthenticationTicketActiveIdFetched(_logger, ticketId); AuthenticationLogMessages.GrantedPermissionsFetching(_logger, userId); var grantedPermissions = (await _usersService.GetGrantedPermissionsAsync( userId, cancellationToken)) .Value .ToDictionary(x => x.Id, x => x.Name); AuthenticationLogMessages.GrantedPermissionsFetched(_logger, grantedPermissions); var ticket = new AuthenticationTicket( ticketId, userId, username, discriminator, avatarHash, grantedPermissions); AuthenticationLogMessages.UserSignedIn(_logger, ticketId, userId, username, discriminator); return(ticket); }